Регулярное выражение проверки электронной почты не работает на дефисах - PullRequest
1 голос
/ 18 ноября 2011

Я пытаюсь подтвердить адреса электронной почты с помощью этого регулярного выражения: ^.*(?=.{8,})[\w.]+@[\w.]+[.][a-zA-Z0-9]+$

Он принимает письма, например a-bc@def.com, но отклоняет письма, например abc@de-f.com (я использую инструмент на http://tools.netshiftmedia.com/regexlibrary/ для тестирования).

Кто-нибудь может объяснить, почему?

Ответы [ 4 ]

2 голосов
/ 18 ноября 2011

Вот объяснение:

В вашем регулярном выражении часть соответствует a-bc@def.com и abc@de-f.com[\w.]+[.][a-zA-Z0-9]+$

Это означает:

  • Должны быть одна или несколько цифр, символы слова (буквы, цифры и знаки подчеркивания) и пробел (пробелы, символы табуляции,и разрывы строк) или '.'.См. справочник '\ w'

  • За ним следует '.',

  • Тогда этоза одним или несколькими символами в коллекции a-zA-Z0-9.

Так что - в de-f.com не соответствует первому формату [\w.]+ в правиле 1.

Модифицированное решение

Вы можете настроить эту часть на [\w.-]+[.][a-zA-Z0-9]+$.сделать - проверкой в ​​строке @.

1 голос
/ 18 ноября 2011

Используйте это регулярное выражение:

var email-regex = /^[^@]+@[^@]+\.[^@\.]{2,}$/;

Он будет принимать a-bc@def.com, а также электронные письма, такие как abc@de-f.com.

Вы также можете обратиться к аналогичному вопросу на SO:

Почему это не принимает адреса электронной почты с дефисом после @?

Надеюсь, это поможет.

1 голос
/ 18 ноября 2011

Потому что после @ вы ищете буквы, цифры, _ или ., затем точку, а затем буквенно-цифровой. Вы не допускаете - нигде после @.

Вам нужно добавить - к одному из классов символов (за исключением одного буквального периода, который я бы написал \.), чтобы разрешить дефисы.

\w - буквы, цифры и подчеркивания.

A . внутри класса символов, обозначенного [], это просто точка, а не какой-либо символ.

В первом выражении вы не ограничиваетесь \w, вы используете .*, то есть 0+ вхождений любого символа (что на самом деле может быть не тем, что вы хотите).

0 голосов
/ 18 ноября 2011

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

^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...