需要防止10个连续的数字,和11个连续的数字,有一些tricky的参数

Need to prevent 10 consecutive digits, and 11 consecutive digits, with some tricky parameters

我正在尝试更改电子邮件的正则表达式,要求我们不能在其中包含 10 位数字 phone 数字,或以 phone 开头的 11 位数字 phone 数字有一个1。困难的部分是,如果11位数字phone不是以1开头,它是有效的,如果它超过11位数字,它是有效的。我挂断了恰好 10 或 11 个连续数字,这些数字也不拒绝任何更长的数字。

这是我的情景,我的期望结果,以及我的当前结果。

所以现在我的表达式成功地拒绝了具有 10 个连续数字的东西,它也拒绝了任何超过 10 位的东西,所以我的 11 位场景还没有影响。

(?!^([0-9] *){10}).*^[_A-Za-z0-9-\+]+(\.[A-Za-z0-9-]+)*@[_A-Za-z0-9-]+(\.[A-Za-z0-9-]+)*(\.[A-Za-z]{2,})$

有可能这对于正则表达式来说太聪明和具体了,我可能会把它分解成更传统的 java,但我工作的领域很难做到这一点具体发生,所以这是我第一个有希望的解决方案。任何帮助将不胜感激。

您可以使用这个正则表达式:

^(?!1?\d{10}@)[\w-]+(?:\.[\w-]+)*@[\w-]+(?:\.[\w-]+)*\.[A-Za-z]{2,}$

RegEx Demo

正则表达式详细信息:

  • ^: 开始
  • (?!1?\d{10}@):如果我们在 @1 之前有 10 位数字后跟在 @
  • 之前有 10 位数字,则否定前瞻断言失败
  • [\w-]+: 匹配 1+ 个单词或连字符
  • (?:\.[\w-]+)*:匹配点后跟 1+ 个 word/hyphen 个字符。重复此组 0 次或多次
  • @:匹配一个@
  • [\w-]+: 匹配 1+ 个单词或连字符
  • (?:\.[\w-]+)*:匹配点后跟 1+ 个 word/hyphen 个字符。重复此组 0 次或多次
  • \.[A-Za-z]{2,}:匹配点后跟2+个英文字母
  • $:结束

如果您的电子邮件地址在您的特定要求之外已被视为有效,为什么不撤销验证?

  • 只需检查它是否以 10 位数字开头或 1 后跟 10,如果是,则拒绝它。
String[] data = { "howard.testman123@gmail.com",
        "1234567890@gmail.com",
        "18005567890@gmail.com",
        "55555555555@gmail.com",
        "321654575321@anything.org" };

String regex = "^(1?\d{10}@.*)";
        
for (String str : data) {
    System.out.println(str + " -> "
            + (str.matches(regex) ? "fail" : "pass"));
}  

打印

howard.testman123@gmail.com -> pass
1234567890@gmail.com -> fail
18005567890@gmail.com -> fail
55555555555@gmail.com -> pass
321654575321@anything.org -> pass