首页 > 解决方案 > 带破折号的正则表达式 13 位电话号码

问题描述

我有一个需要处理电话号码验证的应用程序。电话号码必须包含 13 个字符(数字和破折号的总和)。必须至少有 1 个破折号,最多 3 个破折号。起始字符必须是数字。如何为此验证创建正则表达式?这是我的正则表达式字符串。/^(?:[0-9]-*){13}$/它并不完全符合我的预期

标签: regex

解决方案


所以总共 13 个字符,最多 3 个破折号,最少 1 个表示 10 位数字,对吗?因此您的字符范围是11-13?

如果是这样,请尝试:

^(?=(?:\d-?){10}$)\d+(?:-\d+){1,3}

查看在线演示

  • ^- 开始线锚。
  • (?=- 打开积极的前瞻:
    • (?:- 打开一个非捕获组:
      • \d-?- 匹配一个数字和可选的连字符。
      • ){10}$)- 关闭非捕获组,并在尾弦锚点前匹配十次。然后关闭前瞻。
  • \d+- 1+ 位数。
  • (?:- 打开第二个非捕获组:
    • -\d+- 匹配连字符和 1 个以上的数字。
    • ){1,3}- 关闭非捕获组并匹配1-3次。

推荐阅读