Исправить регулярное выражение для электронных писем, чтобы не допустить последовательных периодов - PullRequest
3 голосов
/ 03 марта 2011

мои регулярные выражения довольно плохие, поэтому я подумал, что поищу помощи в этом.

У меня есть регулярное выражение:

/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/;

, и это работает для большинства случаев проверки моей электронной почты, однако позволяет:

test..testing @ gmail.com

Как бы я изменил вышеупомянутое регулярное выражение, чтобы запретить последовательные периоды в любом месте строки?

Спасибо.

Ответы [ 3 ]

10 голосов
/ 03 марта 2011

Чтобы избежать совпадения двух последовательных точек, вы можете добавить в начало своего регулярного выражения отрицательный прогноз:

/^(?!.*\.{2})[a-z0-9etc...
 ------------

Он не будет совпадать, если в строке есть два последовательных периода, и он нене требует каких-либо других модификаций вашего исходного регулярного выражения.

Однако это кажется плохой идеей, поскольку ваше регулярное выражение изначально неверно.Если вы настаиваете на использовании регулярных выражений для проверки адресов электронной почты, попробуйте следующее:

5 голосов
/ 03 марта 2011

Не.Этот адрес электронной почты на практике функционирует (хотя технически недействителен согласно соответствующему RFC).

Совет: не проверяйте адреса электронной почты с помощью регулярных выражений, поскольку выпоймет неправильно.

0 голосов
/ 03 марта 2011

Не пытайтесь изобретать колесо;)

Например, см. Здесь:

http://www.regular -expressions.info / email.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...