需要防止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 个连续数字,这些数字也不拒绝任何更长的数字。
这是我的情景,我的期望结果,以及我的当前结果。
- howard.testman123@gmail.com - 通过 - 通过
- 1234567890@gmail.com - 失败 - 失败
- 18005567890@gmail.com - 失败 - 失败
- 55555555555@gmail.com - 通过 - 未通过
- 321654575321@anything.org - 通过 - 失败
所以现在我的表达式成功地拒绝了具有 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,}$
正则表达式详细信息:
^
: 开始
(?!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
我正在尝试更改电子邮件的正则表达式,要求我们不能在其中包含 10 位数字 phone 数字,或以 phone 开头的 11 位数字 phone 数字有一个1。困难的部分是,如果11位数字phone不是以1开头,它是有效的,如果它超过11位数字,它是有效的。我挂断了恰好 10 或 11 个连续数字,这些数字也不拒绝任何更长的数字。
这是我的情景,我的期望结果,以及我的当前结果。
- howard.testman123@gmail.com - 通过 - 通过
- 1234567890@gmail.com - 失败 - 失败
- 18005567890@gmail.com - 失败 - 失败
- 55555555555@gmail.com - 通过 - 未通过
- 321654575321@anything.org - 通过 - 失败
所以现在我的表达式成功地拒绝了具有 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,}$
正则表达式详细信息:
^
: 开始(?!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