正则表达式匹配10-15位数字

时间:2013-10-16 18:25:50

标签: java regex

我正在使用以下正则表达式:

 Pattern testPattern= Pattern.compile("^[1-9][0-9]{14}");
 Matcher teststring= testPattern.matcher(number);

if(!teststring.matches())
{
   error("blah blah!");
}

我的要求是:

  1. 要匹配一个不应该以0开头的10-15位数字,并且所有数字应该是数字。
  2. 如果输入的10-15位数字以零开头,则teststring与pattern.my验证错误blah blah不匹配。
  3. 我的问题是如果我输入10-15位数字,它不以零开头,那么也会显示验证错误信息。
  4. 我在正则表达式中遗漏了什么吗?

4 个答案:

答案 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位数之间的任何数字。

DEMO

<强>尸检

  • ^ - 这必须是文本的开头
  • [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}$");