【问题标题】:Java regex phone numberJava 正则表达式电话号码
【发布时间】:2016-02-02 08:32:33
【问题描述】:

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

我尝试使用: regexplanet.com

regex test

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

有人知道我做错了什么吗?

【问题讨论】:

  • 您是在在线测试仪还是代码中检查了正则表达式?在 Java 代码中,^(\\+?27|0)(\\d{9})$ 应该可以工作。在测试人员中,^(\+?27|0)(\d{9})$ 应该可以工作。
  • 对不起,我的错。好答案
  • 我发布了我的答案,请检查。

标签: java regex phone-number


【解决方案1】:

这应该可以,这是variant。 (我在这个例子中删除了 ^ 和 $):

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

【讨论】:

    【解决方案2】:

    在 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}";
    

    【讨论】:

      【解决方案3】:

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

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

      你的号码没问题:

      【讨论】:

        猜你喜欢
        • 2019-05-23
        • 1970-01-01
        • 2017-09-23
        • 2014-02-15
        • 2011-12-14
        • 2013-05-26
        • 1970-01-01
        • 2015-07-20
        相关资源
        最近更新 更多