关于javascript:Regex以Redux形式进行电子邮件验证

Regex for email validation in Redux form

我正在尝试构建一个用于电子邮件验证的regex,我还需要检查以下几个条件:

  • 允许:大写和小写英文字母,数字0到9

  • 允许:""、""、"."、"@"和"'";

  • 3.a.如果不是第一个或最后一个字符,则允许提供"."

    3.b.""不连续出现两次或两次以上。

    3.c.""必须在域名中至少出现一次。

  • 不应包含".@"或"@"。

  • 不应以""开头。

  • "@"必须出现一次

  • 在域名中,最后一个"."之后的字符串长度应至少包含2个字符。

  • 域名中不允许有前导"u"

  • 我创建了以下regex:

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

    我涵盖了除第3.b节外的所有章节。

    有效电子邮件示例:[email protected]无效电子邮件的示例:[email protected],y.s.sss.。。。。。。。@kk.dd

    谢谢


    在模式开始时,对.*\.{2}进行负向前瞻,以确保一行中不存在两个.

    1
    (?!.*\.{2})

    还需要进行一些修复和优化。通过在字符串开始处对(单个).使用负向前查找,可以避免重复字符集两次(因为第一个字符集与第二个字符集相同,只有在没有.的情况下)。

    负字符集本身可以匹配不在集合中的任何字符-例如,您的[^.]就在@之前可以匹配换行字符,这当然不可取。相反,为了确保@之前的最后一个字符不是.,请使用另一个字符集:

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

    (在现代环境中,您可以在@上反向查找.,这与第一种技术类似,以避免重复类似的字符集,但是JS lookback还没有在任何地方得到支持)

    同时使用不区分大小写的标志,以避免在任何地方使用[a-zA-Z。全部:

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

    网址:https://regex101.com/r/tz7lht/2