2016-02-15 5 views
-1

В соответствии с этим article (почти в конце его), используя следующее регулярное выражение будет проверять любую электронную почту в соответствии с RFC 5322Regex для RFC электронной почты совместимом проверки

Но это не работает. Кто-нибудь может проверить, что ошибка в этом выражении, пожалуйста?

A(?=[[email protected]!#$%&'*+/=?^_`{|}~-]{6,254}\z) 
    (?=[a-z0-9!#$%&'*+/=?^_`{|}~-]{1,64}@) 
    [a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)* 
@ (?:(?=[a-z0-9-]{1,63}\.)[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+ 
    (?=[a-z0-9-]{1,63}\z)[a-z0-9](?:[a-z0-9-]*[a-z0-9])? 

Я пробовал использовать regex101.com или другие тестеры, но я не могу заставить его работать.

+0

* Причина ** Вы не должны использовать это регулярное выражение ** является то, что она является слишком широкой. * –

+0

я бы рекомендовал использовать простое регулярное выражение, как '^ [^ @] + @ [^ @] + \. [^ @] + $ 'и отправил электронное письмо с подтверждением, чтобы обеспечить правильность адреса электронной почты. Это регулярное выражение просто проверяет, имеет ли входная строка только один символ @, по крайней мере один символ до @, до периода и после него: http: //stackoverflow.com/questions/742451/what-is-the-simplest-regular- выражение-к-Validate-писем-к-не-принимать-их-бл – Jaco

ответ

0

Используйте WinMerge * для сравнения вашей версии и версии с этой статьей. Различия должны быть ясными :)

С самого начала вы пропустили \ и \z с конца.

\A(?=[[email protected]!#$%&'*+/=?^_`{|}~-]{6,254}\z) 
    (?=[a-z0-9!#$%&'*+/=?^_`{|}~-]{1,64}@) 
    [a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)* 
@ (?:(?=[a-z0-9-]{1,63}\.)[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+ 
    (?=[a-z0-9-]{1,63}\z)[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\z 

* другие инструменты рассеивателей доступны

Смежные вопросы