代码之家  ›  专栏  ›  技术社区  ›  Suresh

如何验证一个电话号码,以便它不允许Java中的所有相同的数字如99999999999或11111111111

  •  6
  • Suresh  · 技术社区  · 14 年前

    如何验证电话号码,使其不允许所有相同的数字,如 99999999999 11111111111 用Java语言

    谢谢 阳光伴侣

    3 回复  |  直到 14 年前
        1
  •  9
  •   Bart Kiers    14 年前

    以下regex:

    ^(\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
  •  15
  •   TheBlastOne    14 年前

    如果可以的话,我会尽量使这个要求失去信誉,这样它就会被拒绝。

    不管你在合理性检查中加入了什么,试图通过在强制字段中输入垃圾来避免强制字段的用户都会 总是 成功。你要么变得“更聪明”,更难发现垃圾数据项,要么进行合理性检查,不让所有真实数据进入系统。大便,大便。建立一个盾,你的用户将创造法西斯你从未想象。

    没有办法对此进行编程(除了通常是无意中、错误输入的打字错误等简单的事情)。

        3
  •  5
  •   aioobe    14 年前

    此代码与至少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