Совпадение электронной почты с a-z и точками или плюсом - PullRequest
1 голос
/ 21 июня 2019

Я пытаюсь сопоставить электронные письма с доменом Gmail, которые имеют в качестве имени следующие символы: a-z, плюс | точка. Итак, в следующем списке электронных писем:

answer.me...charlie@gmail.com
answer.me...charlie@tsunami.org
godfrey+assclown@gmail.com
wisk+as+w+e+rain@gmail.com
atomic+sam@outlook.org
canceee@gmail.com
linkedrebel@gmail.com
nuclearimpact+empoly@gmail.com
clericly.ass@gmail.com
r@gmail.com

Должно совпадать:

answer.me...charlie@gmail.com
godfrey+assclown@gmail.com
wisk+as+w+e+rain@gmail.com
nuclearimpact+empoly@gmail.com
clericly.ass@gmail.com

Я пытался с:

^((?=.*[a-z])(?=.*[.+]).+)@(g(?:oogle)?mail\.com)$

Но точка в списке [.+] совпадает с точкой доменного имени, что соответствует всем доменным именам. Если я уберу точку, она будет соответствовать только письмам с плюсовыми символами в качестве имени. Любое решение для этой проблемы?

Regex101: https://regex101.com/r/bKqzan/1

Ответы [ 2 ]

1 голос
/ 21 июня 2019

Вы можете смягчить все точки с помощью [^@]:

^(?=[^@]*[a-z])(?=[^@]*[.+])([^@]+)@(g(?:oogle)?mail\.com)$

Таким образом, все предварительные ограничения применяются только к детали до @. Более эффективный вариант:

^(?=[^@a-z]*[a-z])(?=[^@.+]*[.+])([^@]+)@(g(?:oogle)?mail\.com)$

См. Демоверсию regex .

Детали

  • ^ - верёвка струны
  • (?=[^@]*[a-z]) - положительный прогноз, требующий строчной буквы после любых 0+ символов, кроме @
  • (?=[^@]*[.+]) - положительный прогноз, требующий плюс или точку после любых 0+ символов, кроме @
  • ([^@]+) - Группа 1: 1+ символов, отличных от @
  • @ - @ char
  • (g(?:oogle)?mail\.com) - Группа 2: g, необязательно, с oogle и затем mail.com
  • $ - конец строки.
0 голосов
/ 21 июня 2019

Тебе не нужны взгляды, я думаю. Вы хотите сопоставить (a) ноль или более строчных букв, за которыми следует (b) хотя бы одна точка или знак плюс, а затем (c) ноль или более строчных букв, точек и / или плюсов. Правильный? Так что это должно работать:

^([a-z]*[.+]+[a-z.+]*)@(g(?:oogle)?mail\.com)$

(см. regex101 demo )

...