Регулярное выражение электронной почты - исключенный указанный набор - PullRequest
0 голосов
/ 11 августа 2011

Я искал регулярное выражение на протяжении большей части шести часов сегодня.За свою жизнь я не могу этого понять.Я пробовал примерно сто разных подходов, но безрезультатно.Любая помощь очень ценится!

Основные правила:

1 - Исключить эти символы в адресной части (перед символом @): "()<>@,;:\[]*&^%$#!{}/"

2 -адрес может содержать «.», но не два подряд.

У меня есть элегантное решение для правила номер один, однако правило номер два меня убивает!Вот что у меня так далеко.(Я включаю только часть до знака @, чтобы было проще).Также важно отметить, что это регулярное выражение используется в JavaScript, поэтому условный IF не допускается.

/^[^()<>@,;:\\[\]*&^%$#!{}//]+$/

Ответы [ 3 ]

1 голос
/ 11 августа 2011

Правило № 2

/^(?:\.?[^.])+\.?$/

означает любое количество последовательностей (необязательная точка, за которой следует обязательная не точка) с необязательной точкой в ​​конце.

Рассмотрим четыре двухсимвольные последовательности

  1. xx соответствует двум не точечным символам.
  2. .x соответствует дополнительной точке, за которой следует не точка.
  3. x. соответствует не точке, за которой следует дополнительная точка в конце.
  4. .. не совпадает, потому что после первой точки нет точек.

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

"..@"@.example.com

является действительным адресом электронной почты.

"..@" - это совершенно допустимое цитируемое локальное производство, а .example.com - это просто способ сказать example.com, но он разрешен для корневого DNS вместо использования пути поиска узла. example.com может преобразоваться в example.com.myintranet.com, если myintranet.com находится в пути поиска хоста, но .example.com всегда разрешается в абсолютный хост example.com.

1 голос
/ 11 августа 2011

Прежде всего, по вашим спецификациям:

^(?![\s\S]*\.\.)[^()<>@,;:\\[\]*&^%$#!{}/]@.*$

Это просто ваше регулярное выражение с (?!.*\.\.), прикрепленным вперед. Это негативный взгляд, который не совпадает, если в строке есть два любых последовательных периода.

Правильно сопоставление адресов электронной почты, однако, немного сложнее.

1 голос
/ 11 августа 2011

Прежде всего, я бы посоветовал вам всегда выбирать, какие символы вы хотите разрешить, а не наоборот, вы никогда не знаете, какие опасные символы вы можете пропустить.

Во-вторых, это регулярное выражение, которое я всегда используюдля проверки писем, и это работает отлично.Надеюсь, это поможет вам.

/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$/i
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...