Java正则表达式电话号码

时间:2015-11-02 12:47:50

标签: java regex phone-number

我提供以下正则表达式:^((?:\ + 27 | 27)| 0)(\ d {9})$ 对于南非的数量,并希望仅对以+27或27或0开头的数字返回true。例如; +27832227765,27838776654或0612323434。

我尝试过使用: regexplanet.com

regex test

但无论我输入什么(即使是简单的正则表达式),两者都会返回false。

有人知道我做错了吗?

3 个答案:

答案 0 :(得分:3)

在Java代码中,您需要将反斜杠加倍,并且在在线测试器中,反斜杠必须是单个。

此外,如果与String#matches一起使用,则无需使用字符串标记的开头和结尾,因为此方法需要完整的字符串匹配。

以下是您的Java代码的外观:

String rex = "(\\+?27|0)(\\d{9})";
System.out.println("+27832227765".matches(rex)); // => true
System.out.println("27838776654".matches(rex));  // => true
System.out.println("0612323434".matches(rex));   // => true

请参阅IDEONE demo

如果您使用String#find,则需要原始正则表达式中的^$个锚点。

注意我将((?:\+27|27)|0)缩短为(\+?27|0),因为?量词意味着 1或0次出现。额外的分组在这里真的是多余的。此外,如果您没有使用捕获的文本,我建议将第一组转为非捕获(即(?:\+?27|0))并从\d{9}中删除圆括号:

String rex = "(?:\\+?27|0)\\d{9}";

答案 1 :(得分:1)

这是在http://tools.netshiftmedia.com/regexlibrary/#上测试的表达式,用于以+27或27或0开头且长度为9的数字。

^((0)|(27)|(\+27))(\d{9})$

您的号码没问题:

enter image description here

答案 2 :(得分:0)

这应该有用,这里是variant。 (我为此示例删除了^和$):

((?:\+27|27|0)(?:\d{9}))