Перейти к содержимому


Пользователь месяца
Ixman Ixman 1-й за Октябрь
Очков активности: 693 0 тем, 33 сообщения, 14 баллов репутации
Сайт: o5cat.ru
ТОП самых активных за этот месяц
  • Фотография ShowPrint
    #1

    ShowPrint (ShowPrint.ru)
    Очков активности: 96 Вне конкурса за определение пользователя месяца

  • Фотография yuran
    #2

    yuran (yurbol.ru)
    Очков активности: 81 0 тем, 54 сообщения, 1 балл репутации

  • Фотография Ixman
    #3

    Ixman (o5cat.ru)
    Очков активности: 67.5 Вне конкурса за определение пользователя месяца

  • Фотография BLIK
    #4

    BLIK
    Очков активности: 51 Вне конкурса за определение пользователя месяца

  • Фотография Mandarin
    #5

    Mandarin
    Очков активности: 42 0 тем, 28 сообщений, 1 балл репутации

  • Фотография WGN
    #6

    WGN (worldgamenews.com)
    Очков активности: 39 Вне конкурса за определение пользователя месяца

  • Фотография pozitron123
    #7

    pozitron123
    Очков активности: 31.5 2 темы, 15 сообщений, 1 балл репутации

  • Фотография алексс
    #8

    алексс
    Очков активности: 27 2 темы, 12 сообщений, 1 балл репутации

  • Фотография Mariko
    #9

    Mariko
    Очков активности: 16.5 1 тема, 8 сообщений, 1 балл репутации

  • Фотография RosenRot
    #10

    RosenRot (abuzov.com)
    Очков активности: 13.5 1 тема, 6 сообщений, 1 балл репутации

  • Показать весь ТОП 10
Поддержите форум! =)
Апдейты
  • Яндекс ИКС: 31.10.2018
  • Яндекс выдача: 15.11.2018
Топ 5 участников по репутации


Регулярка для валидации Email

#1 WebJunior

WebJunior
  • Пользователь
  • 60 сообщений
  • Репутация: 9
0

Отправлено 18 February 2018 - 13:32

Здарова народ! Скажите какую регулярку юзать для валидации мыла? В сети на этот счёт куча мнений. Одни рекомендуют соблюдать стандарт RFC другие говорят, что его соблюдать не стоит третьи пишут, что регулярки вообще не нужны. Я уже не знаю кого слушать! Подскажите пожалуйста какой шаблон нужно использовать для фильтрации мыла? 


 

 

  • 0

#2 miketomlin

miketomlin
  • Пользователь
  • 515 сообщений
  • Репутация: 109

Отправлено 18 February 2018 - 14:41

Если под автомат (например, автоуведомление на оставленное мыло) или внесение в какие-то критичные к вносимому содержимому структуры данных, то нужна. Иначе нет (например, внесение мыла в содержимое простого текстового письма, отправляемого вменяемому оператору). Естественно, регулярки могут быть разными. Зависит от того, что для вас приемлемо, а что нет. Если просто хотите проверить наличие @ между чем-то, то и такой регулярки достаточно: ^[^@]+@[^@]+$ :)


P.S. Иногда атаки делают не по содержимому, а по длине (объему корректных данных, посылаемых атакуемому). Тут лучше не использовать регулярки, а проверять непосредственно длину.


  • 0


#3 WebJunior

WebJunior
    Topic Starter
  • Пользователь
  • 60 сообщений
  • Репутация: 9

Отправлено 18 February 2018 - 15:00

@miketomlin, Ну по RFC длина local name 64 символа и длина домена 254 символа. Вот на это и буду опираться. 


Сообщение отредактировал WebJunior: 18 February 2018 - 15:03

  • 0

#4 WebJunior

WebJunior
    Topic Starter
  • Пользователь
  • 60 сообщений
  • Репутация: 9

Отправлено 18 February 2018 - 16:48

Забавная ситуация. Решил согласно рекомендациям сделать проверку длинны мыла, что бы оно не превышало длину 254 символа. Когда я вставил в инпут строку из 256 символов вкладка браузера зависла. Не думал, что клиенту станет плоха. Вопрос. Нужно ли с этим как-то бороться? Допустимая длина email'а как я уже писал 64 символа это имя и доменная часть 254 символа. Я таких длинных мейлов ни разу не видел и сомневаюсь, что они вообще существуют в природе.


  • 0

#5 WebJunior

WebJunior
    Topic Starter
  • Пользователь
  • 60 сообщений
  • Репутация: 9

Отправлено 18 February 2018 - 17:09

Во дела. Даже от 64-х символов клиент ложится. А как тогда в других местах валидация функционирует? Я знал, что регулярки прожорливые, но, чтоб настолько!


  • 0

#6 Ixman

Ixman
  • Пользователь PRO
  • 2938 сообщений
  • Репутация: 766

Отправлено 18 February 2018 - 19:25

@WebJunior, режу мыло на 30 символов. Всё что выше это уже извращение


  • 0


#7 WebJunior

WebJunior
    Topic Starter
  • Пользователь
  • 60 сообщений
  • Репутация: 9

Отправлено 18 February 2018 - 21:10

режу мыло на 30 символов. Всё что выше это уже извращение
 

 

И как проблем ещё не было? В том плане, что кто-то зарегаться не мог.


  • 0

#8 fedornabilkin

fedornabilkin
  • Модератор
  • 1132 сообщений
  • Репутация: 193

Отправлено 19 February 2018 - 09:46

Где-то читал, что это горе от ума. Не помню статью, но мне очень понравились аргументы и теперь я, если проверяю, то наличие минимум одного символа перед @ и пять символов после. Во многом спасает тип инпута email.

.@[\w-]{2,}\.[\w-]{2,}

Вроде регистрируются новые :)


  • 0

Надо обсудить предложение. А тут знакосчиталка считает знаки. Про Yii2 написано.



#9 Ixman

Ixman
  • Пользователь PRO
  • 2938 сообщений
  • Репутация: 766

Отправлено 19 February 2018 - 11:02

@WebJunior, на счёт что кто-то не мог зарегаться я не знаю, так как не отслеживаю это дело, но никто не жаловался на это. Я проанализировал свою базу email на несколько тысяч и все эти адреса вполне вписываются в 30 символов, так что если и кто-то пытался просунуть мыло в 50 символов и более, то это просто больной на голову человек и мне с ним не по пути.


  • 1


#10 WebJunior

WebJunior
    Topic Starter
  • Пользователь
  • 60 сообщений
  • Репутация: 9

Отправлено 19 February 2018 - 11:50

@Ixman, Ну да действительно человек не здоровый. 30 символов уже проблемно запомнить, а 50 так вообще можно не пытаться запоминать)) Я несколько дней пытаюсь разобраться в вопросе валидации и прихожу к выводу, что RFC не соответствует текущим реалиям. Те символы которые допускает стандарт RFC в email адресах на практике похоже не используются. Во всяком случаи я не видел ни одного мыла с экзотическим набором символов типо alex'f-sklyar@musiсian.ru или shnur+ok@spb.ru про спец символы !#?$% я вообще молчу это бред их не должно быть в адресе мыла.

@fedornabilkin, Вполне разумно. Домен состоит минимум из двух символов(с одним я пока не видел) и после точки тоже минимум 2 символа. Хотя адрес вида user@mail тоже считается валидным.


  • 0

#11 Ixman

Ixman
  • Пользователь PRO
  • 2938 сообщений
  • Репутация: 766

Отправлено 19 February 2018 - 12:07

@WebJunior, лично у меня из спецсимволов это нижнее подчёркивание и тире. Всё остальное не пропускаю.


  • 0


#12 fedornabilkin

fedornabilkin
  • Модератор
  • 1132 сообщений
  • Репутация: 193

Отправлено 19 February 2018 - 12:46

Хотя адрес вида user@mail тоже считается валидным.
по спецификации или по моей регулярке валиден? 
  • 0

Надо обсудить предложение. А тут знакосчиталка считает знаки. Про Yii2 написано.



#13 Ixman

Ixman
  • Пользователь PRO
  • 2938 сообщений
  • Репутация: 766

Отправлено 19 February 2018 - 13:25

Кстати если не ошибаюсь, то php FILTER_VALIDATE_EMAIL как раз пропускает такие адреса user@mail, и я отказался его использовать


  • 0


#14 WebJunior

WebJunior
    Topic Starter
  • Пользователь
  • 60 сообщений
  • Репутация: 9

Отправлено 19 February 2018 - 13:46

по спецификации или по моей регулярке валиден? 
 

 

По спецификации.


Кстати если не ошибаюсь, то php FILTER_VALIDATE_EMAIL как раз пропускает такие адреса user@mail, и я отказался его использовать
 

 

Я на стороне клиента пилю валидацию на сервере у меня валидацией yii занимается.


  • 0

#15 fedornabilkin

fedornabilkin
  • Модератор
  • 1132 сообщений
  • Репутация: 193

Отправлено 19 February 2018 - 13:57

на сервере у меня валидацией yii занимается

Насколько я знаю, yii2 может генерировать js для валидации на клиенте, по таким же правилам, как и на сервере. Помимо этого, можно настроить ajax-валидацию. Т.е. с клиента отправляется запрос, а yii2 также валидирует на сервере. 


  • 0

Надо обсудить предложение. А тут знакосчиталка считает знаки. Про Yii2 написано.



#16 WebJunior

WebJunior
    Topic Starter
  • Пользователь
  • 60 сообщений
  • Репутация: 9

Отправлено 19 February 2018 - 15:08

@fedornabilkin, Может если юзать activeForm, но я не хочу его использовать в своём проекте. Он навязывает свои стили, вывод ошибок. Поэтому валидацию буду реализовывать отдельно от yii.


  • 0

#17 fedornabilkin

fedornabilkin
  • Модератор
  • 1132 сообщений
  • Репутация: 193

Отправлено 19 February 2018 - 21:11

Он навязывает свои стили, вывод ошибок.

Можно задать свой template. Для всей формы.

<?php $form = ActiveForm::begin([
    'id' => 'gb-form',
    'validateOnBlur' => false,
    'action' => Url::to(['guest-book/index']),
    'options'=>[
        'autocomplete'=>'off',
        'method' => 'post', 
    ],
//            'enableAjaxValidation'   => true,
//            'enableClientValidation' => false,
    'fieldConfig' => [
        'template' => 
        "{hint}"
        ."<div class='clearfix'></div>"
        ."{label}"
        ."<div class='col-md-16'>"
        ."<span class='marker'></span>"
        . "{input}"
        ."<p class='help-block'>{error}</p>"
        . "</div>",
        'options' => [
            'tag' => 'div',
            'class' => 'formgroup row',
        ],
        'hintOptions' => [
                'class' => 'hint-block col-md-8',
                'tag' => 'div',
        ],
        'errorOptions' => [
                'class' => 'help-message',
                'tag' => 'span',
        ],
        'labelOptions' => [
                'class' => 'label-control col-md-8',
        ],
        'inputOptions' => [
                'class' => 'gb--text-input',
        ],
    ],
]); ?> 

Для каждого инпута отдельно.

<?= $form->field($gbForm, 'captcha')->widget(Captcha::className(),[
                            'captchaAction'=>'guest-book/captcha',//and in urlManager 'gb/captcha' => 'guest-book/captcha',
                            'template' => "<div class='image_code'>{image}<a href=\"javascript:;\" id=\"refresh_captcha\">Обновить картинку</a></div>{input}",
                            'imageOptions' => [
                                'id' => 'my-captcha-image'
                            ],
                            'options' => ['class' => 'my-captcha-input'],
    ])->hint('Введите цифры с картинки') ?>

  • 0

Надо обсудить предложение. А тут знакосчиталка считает знаки. Про Yii2 написано.



robot

robot
  • Пользователь PRO
  • 2652 сообщений
  • Репутация: 85

Оформление форума – IPBSkins.ru