如何验证电话号码,以便它不允许JAVA中的99999999999
或11111111111
所有相同的数字
感谢 Sunny Mate
答案 0 :(得分:15)
如果可行,我会试图抹黑该要求,以免被拒绝。
无论您在合理性检查中加入什么,用户试图通过输入垃圾来避免必填字段,始终成功。您要么最终拥有“更聪明”难以检测的垃圾数据项,要么进行合理性检查,不会让所有真实数据进入系统。屎,吐出来。建立一个shitshield,你的用户将创造你从未想象过的魅力。
没有办法对此进行编程(除了通常无意识的简单事物,错误地输入错别字等)。
答案 1 :(得分:9)
以下正则表达式:
^(\d)(?!\1+$)\d{10}$
匹配不具有相同数字的11位数字符串。
演示:
public class Main {
public static void main(String[] args) throws Exception {
String[] tests = {
"11111111111",
"99999999999",
"99999999998",
"12345678900"
};
for(String t : tests) {
System.out.println(t+" :: "+t.matches("(\\d)(?!\\1+$)\\d{10}"));
}
}
}
产生:
11111111111 :: false
99999999999 :: false
99999999998 :: true
12345678900 :: true
答案 2 :(得分:5)
此代码匹配至少包含4个重复数字的数字。 (您可以更改正则表达式中的3以增加此阈值。)
Pattern sameDigits = Pattern.compile("(\\d)(\\1){3,}");
for (String num : new String[] {
"11111", // matches
"1234", // does not match
"8584", // does not match
"999", // does not match (too few repetitions)
"9999"}) // matches
if (sameDigits.matcher(num).matches())
System.out.println("Same digits: " + num);
else
System.out.println("Not same digits: " + num);
打印
Same digits: 11111
Not same digits: 1234
Not same digits: 8584
Not same digits: 999
Same digits: 9999