为电话号码编写正则表达式

我想编写一个正则表达式来匹配以下格式的电话号码,即

1- 没有国家代码 9999999999

2 - 带 1 位国家代码 +19999999999

3 - 带国家代码和 () +1(999)9999999

4 - 国家代码 () 和 - +1(999)-999-9999

我写了一个匹配条件 2 但在 1,3 和 4 中失败的正则表达式。

^[+]?[(]?[0-9]{3}[)]?[-s.]?[0-9]{3}[-s.]?[0-9]{4,6}$

一旦我在 + 号后面加上 () 和 - 我的正则表达式停止工作。

我该如何解决?我不是正则表达式专家,而是通过尝试通过谷歌搜索获得的不同模式来组装我的正则表达式。

任何帮助,将不胜感激。

回答

编辑:由于 OP 添加了与 + 号匹配的电话号码样本,因此现在添加以下答案。

^(?:d{10})?(?:+)?(?:(?:d{11})?(?:d(d{3}))?(?:(?:d{7})?(?:-d{3}-d{4})?))$

这是上述正则表达式的在线演示



使用您显示的样本,您能否尝试以下操作。

^+(?:(?:d{11})?(?:d(d{3}))?(?:(?:d{7})?(?:-d{3}-d{4})?))$

这是上述正则表达式的在线演示

说明:为以上添加详细说明。

^+                        ##Checking if starting is from + sign.
(?:                        ##Starting a non-capturing group from here.
   (?:d{11})?             ##Starting a non-capturing group which matches 11 digits here, keeping it optional.
   (?:d(d{3}))?        ##Starting a non-capturing group which matches single digit followed by ( 3 digits followed by ) and keeping this optional too.
   (?:                     ##Starting a non-capturing group here.
     (?:d{7})?            ##Starting a non-capturing group here with 7 digits keeping it optional.
     (?:-d{3}-d{4})?     ##Starting a non-capturing group which has - 3 digits - 4 digits keep it optional.
   )                       ##Closing above non-capturing group here.
)$                         ##Closing very first non-capturing group here.


回答

这是我对你的问题的两分钱。看起来以下内容也打勾:

^(?:+d(?:(d{3})(?:-d{3}-|d{3})|d{6})|d{6})d{4}$

查看在线演示

  • ^ - 起点线锚。
  • (?: - 打开第一个非捕获组:
    • +d - 一个文字“+”和一个数字。
    • (?: - 打开第二个非捕获组:
      • (d{3}) - 在开头和结尾的括号之间匹配三位数字。
      • (?: - 打开第三个非捕获组:
        • -d{3}- - 破折号之间的三位数字。
        • | - 或者:
        • d{3}) - 在关闭第三个非捕获组之前仅三位数。
      • | - 或者:
      • d{6}) - 在关闭第二个非捕获组之前仅六位数。
    • | - 或者:
    • d{6}) - 或者在关闭第一个非捕获组之前仅六位数。
  • d{4} - 四位数。
  • $ - 结束线锚。

向模式添加一个可选数字以允许 2 位国家代码,例如:

^(?:+dd?(?:(d{3})(?:-d{3}-|d{3})|d{6})|d{6})d{4}$


以上是为电话号码编写正则表达式的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>