目前正在尝试验证用户可能以多种不同方式输入的9位数字。该数字可以或可以不以大写字母A开头,然后由大写字母A进行,然后是每隔三个数字后用短划线分隔的9个数字或9个数字。可接受的格式: A123456789 123-456-789
这就是我提出的:
(?=.*[A])[0-9]{9,13}
答案 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})$
答案 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