Regex для проверки списка уникальных адресов электронной почты, разделенных запятыми - PullRequest
1 голос
/ 06 августа 2020

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

^
(?!.*(\b(?:[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})\b).*\b\1\b)
(?:[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})
(?:,(?:[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}))*
$

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

test@foo.com,test1@foo.com
test.email@foo.com,test.email1@foo.com
test.email@foo.com,test.email1@foo.com,test.email2@foo.com

Но не работает чтобы соответствовать этим (пока должно):

test.email@foo.com,test1.email@foo.com
test.email@foo.com,test+email@foo.com
test-email@foo.com,test+email@foo.com
test-email@foo.com,test%email@foo.com

1 Ответ

0 голосов
/ 08 августа 2020

Как обсуждалось в комментариях и чате: мы должны использовать выражение отрицательного просмотра назад ((?<![\w.\-+%])) при проверке всей строки на наличие повторяющегося адреса электронной почты.

^(?!.*((?:(?<![\w.\-+%])[\w._%+-]+@[\w.-]+.[a-zA-Z]{2,}\b)).*\b\1\b)(?:[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})(?:,(?:[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}))*$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...