14

以下の正規表現を使用しています。

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

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

私の要件は次のとおりです。

  1. 10 ~ 15 桁の数字に一致させるには、0 で始まり残りのすべての数字を数字にする必要があります。
  2. ゼロで始まる 10 ~ 15 桁の数字が入力された場合、teststring はパターンと一致しません。検証エラー blah blah が表示されます。
  3. 私の問題は、ゼロで始まらない10〜15桁の数字を入力すると、検証エラーメッセージも表示されることです。

正規表現で何か不足していますか?

4

4 に答える 4

20

With "^[1-9][0-9]{14}" you are matching 15 digit number, and not 10-15 digits. {14} quantifier would match exactly 14 repetition of previous pattern. Give a range there using {m,n} quantifier:

"[1-9][0-9]{9,14}"

You don't need to use anchors with Matcher#matches() method. The anchors are implied. Also here you can directly use String#matches() method:

if(!teststring.matches("[1-9][0-9]{9,14}")) {
    // blah! blah! blah!
}
于 2013-10-16T18:28:04.620 に答える
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

Use end of line anchor $ in your regex with limit between 9 to 14:

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