PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Как правильно проверить email с кириллическим доменом ?
Евегнйи1721
Отправлено: 24 Ноября, 2019 - 16:57:08
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Окт. 2015  


Помог: 0 раз(а)




Здравствуйте,

Не могу проверить 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

(Отредактировано автором: 24 Ноября, 2019 - 17:18:48)

 
 Top
Мелкий Супермодератор
Отправлено: 24 Ноября, 2019 - 20:23:05
Post Id



Активный участник


Покинул форум
Сообщений всего: 11861
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 612 раз(а)




Ваша регулярка неверна. Ни по RFC ни даже по широко используемым адресам.

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


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


-----
PostgreSQL DBA
 
 Top
Евегнйи1721
Отправлено: 24 Ноября, 2019 - 20:27:28
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Окт. 2015  


Помог: 0 раз(а)




Мелкий пишет:
Ваша регулярка неверна. Ни по RFC ни даже по широко используемым адресам.

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


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


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

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

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. (([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})
  3.  
 
 Top
Мелкий Супермодератор
Отправлено: 24 Ноября, 2019 - 20:45:17
Post Id



Активный участник


Покинул форум
Сообщений всего: 11861
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 612 раз(а)




Вы очень зря не обратили внимание что я вызов filter_var назвал регуляркой. Потому что регулярка это и есть, за килобайт размером.
https://github[dot]com/php/php-src/b[dot][dot][dot]l_filters[dot]c#L599

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


-----
PostgreSQL DBA
 
 Top
Евегнйи1721
Отправлено: 25 Ноября, 2019 - 00:35:12
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Окт. 2015  


Помог: 0 раз(а)




Мелкий пишет:
Вы очень зря не обратили внимание что я вызов filter_var назвал регуляркой. Потому что регулярка это и есть, за килобайт размером.
https://github[dot]com/php/php-src/b[dot][dot][dot]l_filters[dot]c#L599

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


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

И на проекта PHP 5.6

(Отредактировано автором: 25 Ноября, 2019 - 00:36:21)

 
 Top
LIME
Отправлено: 26 Ноября, 2019 - 10:39:30
Post Id



Активный участник


Покинул форум
Сообщений всего: 10473
Дата рег-ции: Нояб. 2010  


Помог: 313 раз(а)




Евегнйи1721 пишет:
я просто подумал что она кириллицу не воспринимает
а кириллицы какбэ и не может быть
если набрать в адресной строке домен.рф, а потом скопировав адрес вставить его в любой блокнот то получится http://xn--d1acufc[dot]xn--p1ai/
это и есть то что имелось ввиду
Мелкий пишет:
Пуникод проходить будет


-----
DDD
 
 Top
Евегнйи1721
Отправлено: 26 Ноября, 2019 - 10:51:15
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Окт. 2015  


Помог: 0 раз(а)




LIME пишет:
Евегнйи1721 пишет:
я просто подумал что она кириллицу не воспринимает
а кириллицы какбэ и не может быть
если набрать в адресной строке домен.рф, а потом скопировав адрес вставить его в любой блокнот то получится http://xn--d1acufc[dot]xn--p1ai/
это и есть то что имелось ввиду
Мелкий пишет:
Пуникод проходить будет


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

Почта отправляется с кириллице - адресанту все приходит (Наверное все под пуникод переделаю)
 
 Top
LIME
Отправлено: 26 Ноября, 2019 - 10:54:50
Post Id



Активный участник


Покинул форум
Сообщений всего: 10473
Дата рег-ции: Нояб. 2010  


Помог: 313 раз(а)




Евегнйи1721 пишет:
У меня из админки сайта приходит кириллицей
и ты сможешь только вставлять их ручками в браузеры и клиенты (которые поддерживают пуникод)
Если тебе надо делать рассылку автоматически, то придется преобразовать.

(Отредактировано автором: 26 Ноября, 2019 - 13:45:18)



-----
DDD
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB