Форумы портала PHP.SU » PHP » Программирование на PHP » preg_match проверка email кириллического

Страниц (1): [1]
 

1. Евегнйи1721 - 24 Ноября, 2019 - 16:57:08 - перейти к сообщению
Здравствуйте,

Не могу проверить email по регулярке, подскажите пожалуйста где ошибка

// test@домен.рф
// zaotest@квартира.рф
// и прочие

PHP:
скопировать код в буфер обмена
  1.  
  2. var_dump(preg_match('/^[a-zA-Zа-яА-Я_\d][-a-zA-Zа-яА-Я0-9_\.\d]*\@[a-zA-Zа-яА-Я\d][-a-zA-Zа-яА-Я\.\d]*\.[a-zA-Zа-яА-Я]{2,4}$/i','test@домен.рф'));//int(0)
  3.  
  4. die();
  5.  


// Добавил флаг u на конце регулярки заработало

PHP:
скопировать код в буфер обмена
  1.  
  2. var_dump(preg_match('/^[a-zA-Zа-яА-Я_\d][-a-zA-Zа-яА-Я0-9_\.\d]*\@[a-zA-Zа-яА-Я\d][-a-zA-Zа-яА-Я\.\d]*\.[a-zA-Zа-яА-Я]{2,4}$/iu','test@домен.рф'));//int(1)
  3.  
  4. die();
  5.  


Другой вопрос - какую маску прописать чтобы еще принимал домен в кодировке Punycode ???

На продуктиве будет похожий email
2. Мелкий - 24 Ноября, 2019 - 20:23:05 - перейти к сообщению
Ваша регулярка неверна. Ни по RFC ни даже по широко используемым адресам.

Более корректная регулярка есть встроенная:
PHP:
скопировать код в буфер обмена
  1. filter_var('bob@example.com', FILTER_VALIDATE_EMAIL)


Пуникод проходить будет. Насчёт локализованных доменов впрочем не уверен как нынче у этой функции дела, возможно конвертировать в пуникод надо будет.
3. Евегнйи1721 - 24 Ноября, 2019 - 20:27:28 - перейти к сообщению
Мелкий пишет:
Ваша регулярка неверна. Ни по RFC ни даже по широко используемым адресам.

Более корректная регулярка есть встроенная:
PHP:
скопировать код в буфер обмена
  1. filter_var('bob@example.com', FILTER_VALIDATE_EMAIL)


Пуникод проходить будет. Насчёт локализованных доменов впрочем не уверен как нынче у этой функции дела, возможно конвертировать в пуникод надо будет.


Ок спасибо подумаю над использованием filter_var

Но лучше бы какую нибудь регулярку нормальную, ни где в интернете ни чего не нашел нормального
(Добавление)
Вот вроде не плохая регулярка

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. (([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})
  3.  
4. Мелкий - 24 Ноября, 2019 - 20:45:17 - перейти к сообщению
Вы очень зря не обратили внимание что я вызов filter_var назвал регуляркой. Потому что регулярка это и есть, за килобайт размером.
https://github[dot]com/php/php-src/b[dot][dot][dot]l_filters[dot]c#L599

Если хотите проще - проверьте на наличие символа @
5. Евегнйи1721 - 25 Ноября, 2019 - 00:35:12 - перейти к сообщению
Мелкий пишет:
Вы очень зря не обратили внимание что я вызов filter_var назвал регуляркой. Потому что регулярка это и есть, за килобайт размером.
https://github[dot]com/php/php-src/b[dot][dot][dot]l_filters[dot]c#L599

Если хотите проще - проверьте на наличие символа @


Ок попробую, я просто подумал что она кириллицу не воспринимает

И на проекта PHP 5.6
6. LIME - 26 Ноября, 2019 - 10:39:30 - перейти к сообщению
Евегнйи1721 пишет:
я просто подумал что она кириллицу не воспринимает
а кириллицы какбэ и не может быть
если набрать в адресной строке домен.рф, а потом скопировав адрес вставить его в любой блокнот то получится http://xn--d1acufc[dot]xn--p1ai/
это и есть то что имелось ввиду
Мелкий пишет:
Пуникод проходить будет
7. Евегнйи1721 - 26 Ноября, 2019 - 10:51:15 - перейти к сообщению
LIME пишет:
Евегнйи1721 пишет:
я просто подумал что она кириллицу не воспринимает
а кириллицы какбэ и не может быть
если набрать в адресной строке домен.рф, а потом скопировав адрес вставить его в любой блокнот то получится http://xn--d1acufc[dot]xn--p1ai/
это и есть то что имелось ввиду
Мелкий пишет:
Пуникод проходить будет


У меня из админки сайта приходит кириллицей - ну я подумаю над этим

Почта отправляется с кириллице - адресанту все приходит (Наверное все под пуникод переделаю)
8. LIME - 26 Ноября, 2019 - 10:54:50 - перейти к сообщению
Евегнйи1721 пишет:
У меня из админки сайта приходит кириллицей
и ты сможешь только вставлять их ручками в браузеры и клиенты (которые поддерживают пуникод)
Если тебе надо делать рассылку автоматически, то придется преобразовать.

 

Powered by ExBB FM 1.0 RC1