需要一个正则表达式来匹配电话号码

时间:2016-09-02 13:54:50

标签: regex

我希望匹配(010)12345678010-12345678这样的表达式。现在我的正则表达式为\(?\d{3}[)-]\d{8},但匹配表达式(010-12345678。我该如何写一个真正的正则表达式?

编辑:

我写了一个正确的正则表达式,如(\(\d{3}\)|[^(]\d{3}-)\d{8},可以满足我的需求。

1 个答案:

答案 0 :(得分:1)

请注意,(\(\d{3}\)|[^(]\d{3}-)\d{8}也会匹配非(之前的数字,该数字以3位开头,-位于[^(]之前。

您需要将其删除并使用

(\(\d{3}\)|\d{3}-)\d{8}
^^^^^^^^^^^^^^^^^^

demo。或锚定版本:

^(\(\d{3}\)|\d{3}-)\d{8}$

请参阅another demo

模式详情

  • ^ - 字符串开头
  • (\(\d{3}\)|\d{3}-) - 第1组匹配2个替代方案中的任何一个:
    • \(\d{3}\) - (后跟3位数和文字)
    • | - 或
    • \d{3}- - 3个数字和文字-
  • \d{8} - 8位数字
  • $ - 字符串结束。

根据正则表达式引擎\d可能需要替换[0-9]