14

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

 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 位数字,则测试字符串与模式不匹配。显示我的验证错误等等。
  3. 我的问题是,如果我输入不以零开头的 10-15 位数字,那么还会显示验证错误消息。

我在正则表达式中遗漏了什么吗?

4

4 回答 4

20

"^[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!
}
于 2013-10-16T18:28:04.620 回答
9

/^[1-9][0-9]{9,14}$/将匹配 10 到 15 位数字之间的任何数字。

演示

尸检

  • ^- 这必须是文本的开头
  • [1-9]- 1 到 9 之间的任何数字
  • [0-9]{9,14}- 0 到 9 之间的任何数字匹配 9 到 14 次
  • $- 这必须是文本的结尾
于 2013-10-16T18:30:37.093 回答
2

或者,另一种选择,以便稍后您一目了然 -

^(?!0)\d{10,15}$

于 2013-10-16T18:35:47.650 回答
1

To match a 10-15 digit number which should not start with 0

在正则表达式中使用行尾锚点$,限制在 9 到 14 之间:

Pattern.compile("^[1-9][0-9]{9,14}$");
于 2013-10-16T18:27:32.613 回答