如何使用Java正则表达式验证数字

时间:2017-05-16 18:02:36

标签: java regex validation

目前正在尝试验证用户可能以多种不同方式输入的9位数字。该数字可以或可以不以大写字母A开头,然后由大写字母A进行,然后是每隔三个数字后用短划线分隔的9个数字或9个数字。可接受的格式: A123456789 123-456-789

这就是我提出的:

(?=.*[A])[0-9]{9,13}

4 个答案:

答案 0 :(得分:0)

尝试这种模式:

^A?\d{3}(?:-?\d{3}){2}$

演示:https://regex101.com/r/87F0vW/1

说明:

  • ^ - 字符串开头
  • A? - 可选A
  • \d{3} - 三位数
  • (?: - 非捕获组开始
    • -? - 可选短划线
    • \d{3} - 三位数
  • ) - 小组结尾
  • {2} - 重复两次小组
  • $ - 字符串
  • 的结尾

<强>更新

如果不允许A123-456-789之类的模式,即一个数字可能包含A后跟9个数字而没有分隔符或没有A和9个数字,每隔三分之一后可选择破折号数字,那么正则表达式可以由交替组成:

^(?:A\d{9}|\d{3}(?:-?\d{3}){2})$

演示:https://regex101.com/r/ZjLh8p/1

答案 1 :(得分:0)

要使用正则表达式匹配两种或更多种不同的模式,请使用| logical operator

对于格式1,请使用A\d{9}

对于格式2,请使用\d{3}-\d{3}-\d{3}\d{3}(?:-\d{3}){2}

然后合并A\d{9}|\d{3}-\d{3}-\d{3}

作为Java字符串文字,它是 "A\\d{9}|\\d{3}-\\d{3}-\\d{3}"

如果您使用的是Java matches()方法,而不是find()方法,则您不会需要其他答案建议的^$锚点。< / p>

答案 2 :(得分:0)

我建议使用以下代码和Regex:

        String pattern = "A\\d{9}|(\\d{3}){3}|A?(\\d{3}-){2}\\d{3}";

    String[] sArr = {"A123456789", "123-456-789", "A123-456-789", "123456789", "qwerty", "12-345-12"};

    Pattern p = Pattern.compile(pattern);
    for (int i = 0; i < sArr.length; i++) {
        Matcher m = p.matcher(sArr[i]);

        if (m.find()) {
            System.out.println("Value Matched :: " + sArr[i]);
        } else {
            System.out.println("Value Not Matched :: " + sArr[i]);

        }
    }

输出为:

Value Matched :: A123456789
Value Matched :: 123-456-789
Value Matched :: A123-456-789
Value Matched :: 123456789
Value Not Matched :: qwerty
Value Not Matched :: 12-345-12

答案 3 :(得分:-1)

这似乎是^A?(?:\d{9}|\d{3}(?:-\d{3}){2})$

解释

 ^                      # BOS
 A?                     # Optional 'A' char
 (?:                    # The two acceptable number formats
      \d{9}                  # 9 digits
   |                       # or,
      \d{3}                  # 3 digits - 3 digits - 3 digits
      (?: - \d{3} ){2}
 )
 $                      # EOS