正则表达式,用于10位数的电话号码,间距可变

时间:2019-06-13 05:31:22

标签: regex

我需要验证字符串是否遵循以下规则:

  • 包含数字
  • 可以选择在任意位置包含任意数量的空格字符
  • 不得包含任何其他种类的字符
  • 前两个数字必须是以下集合之一:02; 03; 07; 08; 13; 18
  • ,除非前两个数字分别为1和3,否则数字的数量必须正好为10,在这种情况下,数字的数量可以为10或6。

本质上是澳大利亚的固定电话(带区号),免费电话和13个号码。

理想情况下,正则表达式应尽可能与实现无关。

有效输入示例:

  • 0299998888
  • 02 99998888
  • 02 9999 8888
  • 02 99 998 888
  • 0299 998 888
  • 0299 998888
  • 131999
  • 131 999
  • 13 19 99
  • 1300123456
  • 1300 123456
  • 1300 123 456
  • 1300 12 34 56
  • 1300 12 34 56

PS。我已经检查了至少5个其他答案,并搜索了该问题的多个变体,但无济于事。

我最近的是:

^(?=\d{10}$)(02|03|04|07|08|13|18)\d+

...但是,这不考虑空格,也不接受以13开头的6位数字。

请注意,从理论上讲,可以接受以下内容:

  • 1 3 1999
  • 1 3 1 9 9 9

这是指第一对数字之间可能有一个空格(看起来很糟)。

以下是应该失败的随机数示例:

  • 13145(数字不足)
  • 1300-123-456(不允许使用连字符)
  • 9999 8888(数字不足)
  • (02)9999 8888(不允许使用括号)

1 个答案:

答案 0 :(得分:2)

您可以交替为13设置一个单独的模式:

^(?:(?=(?:\s*\d\s*){10}$)(?:0\s*[2378]|1\s*[38])|(?=(?:\s*\d\s*){6}$)1\s*3).*

演示:https://regex101.com/r/Hkjus2/2