Разделенные запятыми письма Regex - PullRequest
3 голосов
/ 20 июня 2011

Я пытаюсь заставить этот оператор Regex работать

^([_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})+(\s?[,]\s?|$))+$

для строки писем через запятую в textbox с использованием jQuery('#textbox').val();, который передает значения вОператор регулярного выражения для поиска ошибок для строки типа:

"test@test.com, test1@test.com,test2@test.com"

Но по какой-то причине он возвращает ошибку.Я пытался запустить его через http://regexpal.com/, но я не уверен?

NB: Это просто базовый тест на стороне клиента.Я проверяю электронную почту через MailClass на стороне сервера, используя .NET4.0 - так что не прыгайте мне в горло.Целью здесь является устранение простых ошибок.

Escape-версия:

^([_a-z0-9-]+(\\.[_a-z0-9-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*(\\.[a-z]{2,3})+(\\s?[,]\\s?|$))+$

1 Ответ

2 голосов
/ 20 июня 2011

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

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

У вас эта часть (\.[a-z]{2,3})+ выскочила на меня; группу из двух или трех букв {2,3}, которую я часто вижу в качестве попытки подтвердить домен верхнего уровня, но (1) ваше регулярное выражение разрешает одну или более из этих групп и (2) вы исключит действительные адреса электронной почты из доменов, таких как .info или .museum (многие сайты отклоняют мой .us адрес, поскольку они считают, что только 3-буквенные домены являются законными.)

Мой совет отклонять серьезно недействительные адреса, оставляя окончательную проверку серверу, - разрешать в основном (что угодно) @ (что угодно). (Что угодно) - проверять только на "at" и "dot", и, конечно, разрешить несколько точек.

EDIT: пример для "простого" регулярного выражения

[^@]+@[^.]+(\.[^.]+)+

Это соответствует

  • test@test.com
  • test1@test.com
  • test2@test.com
  • foo@bar.baz.co.uk
  • myname@modern.museum

и не совпадает foo@this....that

Примечание. Даже при этом будут отклонены некоторые действительные адреса электронной почты, потому что все, что угодно разрешено слева от @ - даже другое @ - если все это экранировано правильно. Но я никогда не видел такого за 25 лет использования электронной почты в реальной жизни.

...