Regex для проверки электронной почты в форме Redux - PullRequest
0 голосов
/ 28 января 2019

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

  1. разрешено: прописные и строчные английские буквы, цифры от 0 до 9

  2. разрешено: "_", "-", ".", "@" И "'";

3.a.Символ "."разрешено указывать, если это не первый или последний символ

3.b.""не появляется два или более раз подряд

3.c.""должен появиться хотя бы один раз в доменном имени

не должен содержать «. @» Или «@».

не должен начинаться с «.»

«@ ”Должен появляться один раз

В имени домена длина строки после последнего«. »Должна содержать не менее 2 символов

В доменном имени

не допускается использование начального символа "_". Я создал следующее регулярное выражение:

^[a-zA-Z0-9_'-]{1}[a-zA-Z0-9._'-]*([^.]@[^._])([a-zA-Z0-9_.'-])+[.]{1}[a-zA-Z0-9_'-]{2,}$ 

Я рассмотрел все разделы, кроме раздела 3.b.

пример действительного адреса электронной почты: ya.ll.tj@gg.cc пример недействительного адреса электронной почты: ya..lf @ dd.cc, yssss ... @ kk.dd

Спасибо в

1 Ответ

0 голосов
/ 28 января 2019

В начале шаблона отрицательный взгляд на .*\.{2}, чтобы убедиться, что в строке никогда не бывает двух .:

(?!.*\.{2})

Также необходимо внести некоторые исправления и оптимизировать.Используя отрицательный прогноз для (одиночного) . в начале строки, вы можете избежать необходимости повторять набор символов дважды (так как первое идентично второму, только без .).

Один только набор отрицательных символов может соответствовать любому символу, не входящему в набор - например, ваш [^.] прямо перед @ может соответствовать символу новой строки, который, безусловно, нене желательноВместо этого, чтобы убедиться, что последний символ перед @ не является ., используйте другой набор символов:

^(?!.*\.{2})(?!\.)[a-z0-9_.'-]*[a-z0-9_'-]@

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

Используйте также флаг без учета регистра, чтобы избежать необходимостииспользуйте [a-zA-Z везде.В полном объеме:

^(?!.*\.{2})(?!\.)[a-z0-9_.'-]*[a-z0-9_'-]@(?!_)(?:[a-z0-9_'-]+\.)+[a-z0-9_'-]{2,}$

https://regex101.com/r/tZ7LHt/2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...