Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Почти идеальная проверка почтового адреса...
 
 автор: root_xxx   (24.05.2015 в 02:45)   письмо автору
 
 

$str4re = '^[a-zA-Z0-9_\-]*[_0-9a-zA-Z\.\-]*[0-9a-zA-Z_\-]+@[a-zA-Z0-9\-]+[a-zA-Z0-9\.\-]*\.[a-zA-Z]{2,4}$';

НО тут возможна ошибка: ДВЕ подряд точки в имени домена.

Как в ЭТОМ ЖЕ рег выражении добавить такую проверку?

Я организовал проверку посиками в строке, но как сделать именно все в ОДНОМ выражении? Нужно использовать подвыражения?

  Ответить  
 
 автор: sms-send   (24.05.2015 в 19:59)   письмо автору
 
   для: root_xxx   (24.05.2015 в 02:45)
 

Например, так:
^[a-zA-Z0-9_\-]*[_0-9a-zA-Z\.\-]*[0-9a-zA-Z_\-]+@[a-zA-Z0-9\-]+(?:(?!\.\.)[_0-9a-zA-Z\.\-])*\.[a-zA-Z]{2,4}$


Или так:
^[a-zA-Z0-9_\-]*[_0-9a-zA-Z\.\-]*[0-9a-zA-Z_\-]+@(?:[a-zA-Z0-9\-]+\.)+[a-zA-Z]{2,4}$


Одно замечание: эта регулярка даже близко не претендует на "идеал" по валидации e-mail адресов, т.к. пропустит множество недопустимых адресов и не пропустит ещё большее множество валидных и реально существующих.

Попытка реализовать RFC в regexp (людям с неустойчивой психикой и беременным не рекомендуется): http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html
На вики есть компактное описание синтаксиса и примеры валидных/невалидных адресов: http://en.wikipedia.org/wiki/Email_address#Syntax

  Ответить  
 
 автор: root_xxx   (25.05.2015 в 06:36)   письмо автору
 
   для: sms-send   (24.05.2015 в 19:59)
 

> эта регулярка даже близко не претендует на "идеал" по валидации e-mail адресов,

Какая именно регулярка? Та что я привел или те что вы написали?

Я свою сам построил - она не тупо взята откуда-то. Что она плохого пропустит и что хорошего не пропустит ?

Смотрю тут - http://en.wikipedia.org/wiki/Email_address#Valid_email_addresses , НО это можно исправить.

Знаю, что моя 100% не пропустит адрес mail@net

>
>Попытка реализовать RFC в regexp (людям с неустойчивой психикой и беременным не рекомендуется)

%;:))) - ага за ссылки пасиба. У меня скоро вырубят интернет. Сохранил.

Сомневаюсь что у кого-то будут такие адреса,
"very.(),:;<>[]\".VERY.\"very@\\ \"very\".unusual"@strange.example.com
#!$%&'*+-/=?^_`{}|~@example.org
"very.(),:;<>[]\".VERY.\"very@\\ \"very\".unusual"@strange.example.com

НО возможность присутствия таких символов....(? нужно подумать)

  Ответить  
 
 автор: Мимовася   (25.05.2015 в 12:13)
 
   для: root_xxx   (25.05.2015 в 06:36)
 

>Какая именно регулярка? Та что я привел или те что вы написали?

Все, написанные выше в этом топике.

> Что она плохого пропустит и что хорошего не пропустит ?

Пропустит: ".---..---@------.abcd"
Не пропустит валидные адреса: "local+mark@gmail. com", "local@[33.33.33.33]" и много других.

Т.к. написать качественную регулярку, учитывающую все допустимые и отсекающую недопустимые варианты, неоправданно сложно, то стоит пойти по принципу наименьшего зла: лучше пропустить невалидные адреса, чем ложно отказать на реальном адресе.

^.+@.+$


Если задача не учебная, то лучше взять проверенный вариант регулярки из какого-нибудь популярного фреймворка.

  Ответить  
 
 автор: root_xxx   (25.05.2015 в 21:30)   письмо автору
 
   для: Мимовася   (25.05.2015 в 12:13)
 

>Пропустит: ".---..---@------.abcd"
>Не пропустит валидные адреса: "local+mark@gmail. com", "local@[33.33.33.33]" и много других.
>
>Т.к. написать качественную регулярку, учитывающую все допустимые и отсекающую недопустимые варианты, неоправданно сложно, то стоит пойти по принципу наименьшего зла: лучше пропустить невалидные адреса, чем ложно отказать на реальном адресе.
>
>
^.+@.+$

>
>Если задача не учебная, то лучше взять проверенный вариант регулярки из какого-нибудь популярного фреймворка.

та задача не учебная. блиин, ну та ничего - добавлю пару символов, НО кардинально менять свое регекс не буду.

  Ответить  
 
 автор: root_xxx   (25.04.2016 в 18:39)   письмо автору
 
   для: root_xxx   (25.05.2015 в 21:30)
 

ПОЧЕМУ никто не сказал про filter_var($usmail, FILTER_VALIDATE_EMAIL)???

function check_usmail_correct($ddb, $usmail) {
    require ('vars.inc');
     
    if (!filter_var($usmail, FILTER_VALIDATE_EMAIL)) {
        //root@... НЕ правилный адрес.
        go2($REGERR);  // 
    }

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования