我试图修改电子邮件的正则表达式,要求电子邮件中不能包含10位电话号码,或以1开头的11位电话号码。困难的是,如果11位电话号码不以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,})$这可能对regex来说太聪明、太具体了,我可能会把它分解成更传统的java,但是我正在研究的领域会让它很难实现,所以这是我的第一个有希望的解决方案。任何帮助都将不胜感激。
发布于 2022-05-20 14:50:17
您可以使用此正则表达式:
^(?!1?\d{10}@)[\w-]+(?:\.[\w-]+)*@[\w-]+(?:\.[\w-]+)*\.[A-Za-z]{2,}$RegEx详细信息:
^:开始(?!1?\d{10}@):如果我们在@或1之前有10位,而在@之前有10位,则对断言失败进行负面展望[\w-]+:匹配单词或连字符的1+(?:\.[\w-]+)*:匹配点,后面跟着单词/连字符的1+。重复此组0次或多次@:匹配一个@[\w-]+:匹配单词或连字符的1+(?:\.[\w-]+)*:匹配点,后面跟着单词/连字符的1+。重复此组0次或多次\.[A-Za-z]{2,}:匹配点后面跟着英文字母的2+$:结束发布于 2022-05-20 16:15:08
如果您的电子邮件地址已经被认为是有效的,超出您的具体要求,为什么不直接逆转验证?
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 -> passhttps://stackoverflow.com/questions/72320830
复制相似问题