提问者:小点点

具有可变间距的10位电话号码的正则表达式


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

  • 包含数字
  • 可以在任意位置包含任意数量的空格字符
  • 不能包含任何其他类型的字符
  • 前两个数字必须是集合中的一个:02; 03; 07; 08; 13; 18
  • 并且数字的数目必须正好是10,除非前两个数字是1和3,在这种情况下,数字的数目可以是10或6.

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

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

有效输入示例:

  • 0299998888
  • 02 999 98888
  • 02 999 9 888 8
  • 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

附注:我已经检查了至少5个其他答案,并搜索了这个问题的多种变体,但没有任何效果。

离我最近的是:

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

。。。但这不考虑间距,也不接受以13开头的6位数字。

注意,理论上,以下是可以接受的:

  • 1 3 199 9
  • 1 3 1 9 9 9

我的意思是,第一对数字之间可能有一个空格(就像看起来那样糟糕)。

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

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

共1个答案

匿名用户

您可以为交替中的13创建单独的模式:

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

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