我正在构建一个正则表达式模式来验证我输入的String。 这是我必须包括的限制;
The letters a to z (upper and lowercase) (zero or many times)
o The numbers 0 to 9 (between zero and three times)
o The ampersand (&) character (zero or may times)
o The space character (zero or one time)
这是我在
上构建和测试的正则表达式[a-zA-Z&]*|[0-9]{0,3}|[\s]?
String p1 = "[a-zA-Z\\&]*|[0-9]{0,3}|[\\s]?" ;
if (bankName.matches(p1) && bankName.length() >= 8) {
System.out.println("Yes");
}
else{
System.out.println("NO");
}
这是我要测试的条目。
tXiPkaodan57yzrCxYjVT
String bankName = "tXiPkaodan57yzrCxYjVT" ;
我正在测试正则表达式的站点不匹配,因为数字(5和7)开始并且在字母之间,但是我在regex模式中包括应该可以包含从0-的任何数字9次,0-3次 https://www.freeformatter.com/java-regex-tester.html#ad-output 我在
上测试过的网站答案 0 :(得分:0)
正则表达式中的竖线(“或”)具有最高优先级,因此该正则表达式为:
如果输入恰好是以下之一,则进行匹配:
您的输入与这些无关。这是这些东西的混合体。例如,输入“ a1a”与您的正则表达式不匹配,因为,请逐步执行:“ a”强制正则表达式匹配器选择上面3个选项中的第一个,即是。现在没有回头路了。您的正则表达式将与a匹配,在1上不匹配,这就是结尾。
那么,您如何解决呢?不坚持使用正则表达式;这不是解决此问题的好方法。正好满足您要求的正则表达式非常复杂。
相反,为什么不循环遍历每个字符并有4个计数器(空格,数字,字母和其他东西)。对于每个字符,增加右计数器。然后最后检查“其他填充”计数器是否为0,数字是否为3或更少,空格是否为1或更少,然后才有效。否则,不是。