Есть миллион возможных решений, но мне нравится:
^[^<>\s\@]+(\@[^<>\s\@]+(\.[^<>\s\@]+)+)$
По сути, вот что он делает:
- Соответствует всем символам, кроме левого и правого шевронов, пробелов и @
- Соответствует символу @
- Повтор # 1
- Совпадение с точкой (.)
- Повтор # 1
Это означает, что разрешено использование иностранных символов, когда имена доменов на китайском / арабском должны быть разрешены, как упоминалось в BalusC. Но он поймает грубые ошибки, такие как отсутствующий символ @, точка для имени домена, пробел и т. Д. Кроме того, в Javascript он будет вести себя так же, как и в любом другом языке регулярных выражений на основе Perl. знать о. Так что это хороший кандидат для проверки как на стороне клиента, так и на стороне сервера.
Я создал тестовые примеры для этого здесь:
http://regexhero.net/tester/?id=4a1f18cf-3dc0-4157-ab74-489a69e184ee
Я уверен, что вы можете ввести несколько неверных адресов, которым будет соответствовать это регулярное выражение. Но для целей веб-проверки меня это не волнует. Я имею в виду, что регулярное выражение никогда не будет полной заменой реальной проверки электронной почты.
Так что лично меня больше всего беспокоит ловушка наиболее распространенных ошибок при разрешении ВСЕХ потенциально действительных адресов электронной почты. Если кто-то может найти действительный адрес электронной почты, который не будет соответствовать этому регулярному выражению , , я хотел бы знать об этом. До тех пор, это то, что я собираюсь использовать. ;)