为什么我的 Regex 没有检测到以特定模式书写的 phone 数字?

Why my Regex is not detecting phone numbers written in certain patterns?

我有一个正则表达式来检查文本中的 phone 个数字。请检查下面。

(\d[\s-]?)?[\(\[\s-]{0,2}?\d{3}[\)\]\s-]{0,2}?\d{3}[\s-]?\d{4}

这个正则表达式工作正常,但如果我这样写就不能正常工作了。

  1. 示例 1:088 11 22 458
  2. 示例 2:+1 88 11 22 458

如何修改正则表达式来修复这个错误?

您可以在开头添加一个可选的 +,允许在区号中使用两位或三位数字,并添加一个替代项以匹配两位两位数,然后在末尾添加一组三位数字:

(?:\+?\d[\s-]?)?[([\s-]{0,2}\d{2,3}[)\]\s-]{0,2}(?:\d{3}[\s-]?\d{4}|\d{2}[\s-]?\d{2}[\s-]?\d{3})

参见regex demo详情:

  • (?:\+?\d[\s-]?)? - 一个可选的 一个可选的 +,一个数字,然后是一个空格或一个连字符
  • [([\s-]{0,2} - 零个、一个或两个 ([、空格或连字符
  • \d{2,3} - 两位或三位数
  • [)\]\s-]{0,2} - 零个、一个或两个 )]、空格或连字符
  • (?:\d{3}[\s-]?\d{4}|\d{2}[\s-]?\d{2}[\s-]?\d{3}) - 两者之一
    • \d{3}[\s-]?\d{4} - 三位数字,一个可选的空格或 -,四位数字
    • | - 或
    • \d{2}[\s-]?\d{2}[\s-]?\d{3} - 两个数字,一个可选的空格或 -,两个数字,一个可选的空格或 -,三个数字

您可能还考虑添加数字边界以禁止在左侧(负数 (?<!\d) 后视)和右侧(负数 (?!\d) 前视)具有其他数字的匹配项:

(?:\+?(?<!\d)\d[\s-]?)?[([\s-]{0,2}(?<!\d)\d{2,3}[)\]\s-]{0,2}(?:\d{3}[\s-]?\d{4}|\d{2}[\s-]?\d{2}[\s-]?\d{3})(?!\d)

参见 this regex demo

我会使用这个正则表达式: [\+\(\[]?\d[\(\[\s-]?\d[\s-]?\d[\)\]\s-]?\d[\s-]?\d[\s-]?\d[\s-]?\d[\s-]?\d[\s-]?\d[\s-]?\d

它允许在任何地方使用定界符。 有时 phone 数字是分隔符,这样更容易记住。

例如:

  • 088 111-2-111
  • (088)11-22-33-4