匹配正则表达式中的电话号码

时间:2011-02-15 18:35:06

标签: java regex

[1-9]\\d{2}-[1-9]\\d{2}-\\d{4}

[1-9]有什么作用?就像特定范围的整数? 我试过194-333-1111但没有验证。

这是一个微不足道的问题,但花了我一个小时仍然无法弄清楚。

任何帮助表示赞赏!感谢


修改

if (phone.matches("[1-9]\\d{2}-[1-9]\\d{2}-\\d{4}"))
  System.out.println("Invalid phone number");
else
  System.out.println("Valid input. Thank you.");

5 个答案:

答案 0 :(得分:3)

[1-9]19之间的字符范围匹配。

您在哪里测试表达式,因为它与您的目标字符串匹配。但是,斜杠是转义的,因为它们在输入时可能需要编程语言。您可以使用将为您进行转义的应用程序测试表达式。

代码编辑:

您的错误消息已被撤消。当字符串有效时,matches()返回true,但是在if else语句的真实部分中打印它是无效的。

答案 1 :(得分:2)

以下是正则表达式的解体:

[1-9] // Starts with a digit other than 0
\d{2} // and followed by any two digits
- // and followed by -
[1-9] // and followed a digit other than 0
\d{2} // and followed by any two digits
- // and followed by -
\d{4} // and followed by any four digits 

194-333-1111与上述正则表达式匹配。问题可能在于逃避角色。

e.g:

public static void RegexTest()
    {
            Pattern p = Pattern.compile("[1-9]\\d{2}-[1-9]\\d{2}-\\d{4}");
            Matcher m = p.matcher("194-333-1111");
            boolean b = m.matches();
          System.out.println(b);

    }

答案 2 :(得分:1)

[1-9]匹配从1到9开始的任何数字

除非您将\\d表示为\d并且与您给出的数字不匹配,否则给定的正则表达式肯定是错误的。如果你能说出你想要匹配的数字格式,我们可以提供更好的正则表达式。

答案 3 :(得分:1)

正如你所写的那样,正则表达式可能无法达到你想要的效果。你需要首先解开反斜杠。例如,在Perl中,您可以使用它:

if ($number =~ /[1-9]\d{2}-[1-9]\d{2}-\d{4}/) {
  print "matches!\n";
}

然后您的正则表达式将按如下方式分解:

/[1-9]    # Match exactly one of the numbers 1 through 9
 \d{2}    # Match exactly two digits
 -        # Match exactly one dash
 [1-9]    # Match exactly one of the numbers 1 through 9
 \d{2}    # Match exactly two digits
 -        # Match exactly one dash
 \d{4}    # Match exactly four digits
/x

编辑:为了向您展示目前的正则表达式如何运作,以下是其细分:

/[1-9]  # Match exactly one of the numbers 1 through 9
 \\     # Match exactly one \
 d{2}   # Match exactly two 'd's
 -      # Match exactly one dash
 [1-9]  # Match exactly one of the numbers 1 through 9
 \\     # Match exactly one \
 d{2}   # Match exactly two 'd's
 -      # Match exactly one dash
 \\     # Match exactly one \
 d{4}   # Match exactly four 'd's
/x

看看双反斜杠有多大区别?

答案 4 :(得分:1)

如果您可以依赖其他库,我建议您使用Google的libphonenumber开源库来验证您的电话号码。它也有验证支持。