我正在使用以下正则表达式:
Pattern testPattern= Pattern.compile("^[1-9][0-9]{14}");
Matcher teststring= testPattern.matcher(number);
if(!teststring.matches())
{
error("blah blah!");
}
我的要求是:
我在正则表达式中遗漏了什么吗?
答案 0 :(得分:16)
使用"^[1-9][0-9]{14}"
,您匹配的是15
个数字,而不是10-15
个数字。 {14}
量词将完全匹配先前模式的14
重复。使用{m,n}
量词:
"[1-9][0-9]{9,14}"
您不需要使用Matcher#matches()
方法使用锚点。锚是隐含的。在这里,您可以直接使用String#matches()
方法:
if(!teststring.matches("[1-9][0-9]{9,14}")) {
// blah! blah! blah!
}
答案 1 :(得分:8)
/^[1-9][0-9]{9,14}$/
将匹配10到15位数之间的任何数字。
<强>尸检强>:
^
- 这必须是文本的开头[1-9]
- 1到9之间的任何数字[0-9]{9,14}
- 0到9之间的任何数字匹配9到14次$
- 这必须是文本的结尾答案 2 :(得分:2)
或者,一个替代方案,以后您可以一目了然地看 -
^(?!0)\d{10,15}$
答案 3 :(得分:1)
To match a 10-15 digit number which should not start with 0
在正则表达式中使用行尾$
,限制在9到14之间:
Pattern.compile("^[1-9][0-9]{9,14}$");