【问题标题】:Regular expression for email that does not allow consecutive dots before @电子邮件的正则表达式,在 @ 之前不允许连续的点
【发布时间】:2021-05-22 10:16:27
【问题描述】:

我正在编写一个通过 JavaScript 进行客户端表单数据验证的正则表达式,但我找不到一种方法来制作一个匹配此规则的正则表达式:

  1. 电子邮件不能以点开头(只能使用数字或小写字母),
  2. @之前的部分电子邮件可以有小写字母、数字和点,但不能是连续的,
  3. @前的最后一个字符不能是点,
  4. @ 之后必须至少有两个小写字母或数字,之后必须至少有一个包含点和至少两个小写字母的结构。 像这样的电子邮件应该由这个正则表达式匹配: cary1.1grant.2@gmail.edu.us 或 1james23ste.wart@mail3.co.com 但不是这样的 marilyn..monroe@gmail.co.us 或 .marlon12brando@yahoo.edu.us 或 jamescaan.@gmail.gov.fr

这是我的正则表达式,但它检查整个字符串的结尾是否不允许点,而不是在 @ 之前:

var emailAddressModel = /^((?!\.)(?!.*\.$)(?!.*?\.\.)[a-z0-9.]{6,30})[@][a-z0-9]{2,}([.][a-z]{2,})+$/;

【问题讨论】:

    标签: javascript jquery regex validation


    【解决方案1】:

    看起来像下面的勾选你的框:

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

    在线查看demo

    • ^ - 起始线锚点。
    • [0-9a-z]+ - 1+ 数字或小写字母。
    • (?: - 打开非捕获组:
      • \.[0-9a-z]+ - 文字点后跟 1+ 数字或小写字母。
      • )* - 关闭非捕获组并匹配 0+ 次。
    • @ - 文字“@”。
    • [a-z0-9]{2,} - 2 个以上的数字或小写字母。
    • (?: - 打开非捕获组:
      • \.[a-z]{2,} - 一个文字点,后跟 2 个以上的小写字母。
      • )+ - 关闭非捕获组并匹配 1 次以上。
    • $ - 结束线锚。

    如果您希望在“@”之前加入最小-最大部分(不在您的要求中,而是在您自己尝试的模式中),您可以使用:

    ^(?=.{6,30}@)[0-9a-z]+(?:\.[0-9a-z]+)*@[a-z0-9]{2,}(?:\.[a-z]{2,})+$
    

    唯一的区别是在“@”之前的 6-30 个字符处断言位置的正向前瞻。

    【讨论】:

      【解决方案2】:

      你试过了吗?

      ^(((?!\.)(?!.*\.$)(?!.*?\.\.)[a-z0-9.]{6,30})|((?!\.)(?!.*\.$)(?!.*?\.\.)[a-z0-9.]{6,29}[^.])[@][a-z0-9]{2,}([.][a-z]{2,})+)$

      1. 这将准确检查电子邮件名称是否在 6-30 个字符之间
      2. 如果“@”之前有一个点,它将忽略该电子邮件

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-24
        • 2011-09-04
        • 1970-01-01
        • 1970-01-01
        • 2021-12-18
        • 2012-01-12
        相关资源
        最近更新 更多