如何验证电话号码,以便它不应该允许象Java 99999999999或11111111111所有相同NUMERICS

Sur*_*nti 6 java regex

如何验证电话号码,以便它不允许所有相同的数字,如JAVA 9999999999911111111111JAVA

谢谢Sunny Mate

The*_*One 15

如果可行,我会试图抹黑该要求,以免被拒绝.

无论你在合理性检查中加入什么,用户试图通过输入垃圾来避免强制字段将始终成功.您要么最终拥有"更聪明"难以检测的垃圾数据项,要么进行合理性检查,不会让所有真实数据进入系统.屎,吐出来.建立一个shitshield,你的用户将创造你从未想象过的魅力.

没有办法对此进行编程(除了通常无意识的简单事物,错误地输入错别字等).

  • 非常正确.如果用户输入了错误的数据,那么这应该是一个告诉标志,该字段不应该是强制性的.如果用户认为该字段很重要,则他们不会输入错误数据. (3认同)
  • 使用表达式'shitshield'的+1 (2认同)

Bar*_*ers 9

以下正则表达式:

^(\d)(?!\1+$)\d{10}$
Run Code Online (Sandbox Code Playgroud)

匹配不具有相同数字的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}"));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

产生:

11111111111 :: false
99999999999 :: false
99999999998 :: true
12345678900 :: true
Run Code Online (Sandbox Code Playgroud)


aio*_*obe 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);
Run Code Online (Sandbox Code Playgroud)

打印

Same digits: 11111
Not same digits: 1234
Not same digits: 8584
Not same digits: 999
Same digits: 9999
Run Code Online (Sandbox Code Playgroud)