Pull to refresh

Comments 23

UFO just landed and posted this here
UFO just landed and posted this here
Повторение — мать непонимания.
Отмечу тот факт, что e-mail адреса невозможно на 100% корректно валидировать регулярным выражением.
Одно из обсуждений на SO: http://stackoverflow.com/a/201378/634821
А как насчёт PEG? У неё вроде возможности шире. Хотелось бы что-то практичное почитать по теме таких выражений, а то PCRE уже избиты вдоль и поперёк.
UFO just landed and posted this here
Единственный способ проверить корректность e-mail — отправить по нему письмо и получить ответ. Всё, других способов нет.
Тоже не всегда. Правильный ли адрес root@wqezxc? А если у меня в /etc/hosts и в mydomain (если брать postfix) прописан wqezxc?
Id est это правильный подход для проверки адреса регистрации/оповещения и т. п.
UFO just landed and posted this here
И этот пример прекрасно иллюстрирует «единственность». Уж не знаю, хто не согласен…
Понятно, что цель статьи — показать работу с регурялными выражениями. Но пример получился очень неудачный, совершенно не годится для реальной валидации. Слишком много нюансов упущено. Например, мой реальный часто используемый ящик с символом подчеркивания в имени в пролете. Домены верхнего уровня .travel, .museum в пролете. Не говоря уж про хитрые, но валидные адреса типа maovrn@localhost, noreply@8.8.8.8
Там ещё обратная крайность не учтена. Почта может висеть на домене верхнего уровня. Например, совершенно точно почта была на домене «to.»
Pattern pattern = Pattern.compile(“\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*\\.\\w{2,4}”);

agrrr

домен в зоне .company и любые более 4х буквенные сразу бреются.
То, о чём идёт речь — очень частные случаи. Туториал нацелен не на то, прошу заметить. Это ж всё равно что сетовать на отсутствие лямбда-выражений в учебнике «Джава для начинающих»
много народа из таких «хау ту», простым нагугливанием втыкают в продакшн решения.
> очень частные случаи
Плохой подход: половину всех возможных вариантов из множества «случаи» можно расценивать как «частные». Они очень редки и их очень много.
UFO just landed and posted this here
А вы уверены, что экранировать точку внутри [] нужно? Все известные мне движки регулярных выражений (движок Java к ним не относится) этого не требуют. Довольно большое количество движков, наоборот, воспримет [\.] как (?:\\|\.): т.е. [\.] будет совпадать как с обратной косой чертой, так и с точкой.
> Состоять из двух частей, разделённых символом “@”.
> Левая часть должна состоять из английских букв или цифр, может содержать точки и тире, притом после точки или тире обязательно должна следовать как минимум одна буква.
> Правая часть должна содержать хотя бы одну точку в конце, после которой должны следовать от двух до четырёх букв.
> Начинаться обе части должны с буквенных символов.

Вы неправы во всех четырёх пунктах:
— В адресе может быть больше одной '@', хотя да, одна из собак делит адрес на две логические части
— Левая часть может содержать практически любые символы, а так же пользующиеся популярностью теги, идущие после знака "+".
— Правая часть, фактически, это что угодно, к чему возможно зарезовить путь средствами днс или обратиться напрямую
— справа может оказаться ip-адрес, в том числе и ipv6
Вот вам корректный адрес:: «correct\»@ddress"@localhost

Фактически, вы можете быть уверенны только в том, что в email-адресе есть хотя бы одна '@'.
так же пользующиеся популярностью теги, идущие после знака "+".
И то, интерпретация их в качестве тегов/thread-id и т. п. на усмотрение MTA/MDA.
Sign up to leave a comment.

Articles