【问题标题】:regex to check phone number [duplicate]正则表达式检查电话号码[重复]
【发布时间】:2015-11-19 15:52:37
【问题描述】:

我正在尝试构建一个正则表达式以在 JS 中验证国际号码是否格式正确。

我认为一个数字的格式如下:'00'[国家][数字]。 “国家”和“数字”只是数字(不能以 0 开头)。 'country' 的大小为 {1-3},'country' + 'number' 小于 15。

我使用了这个错误的正则表达式:/^00[1-9][0-9]{0,2}[1-9][0-9]{0,11}$/ 我的问题是关于“数字”的大小取决于“国家”的大小。 'number' 的最大大小为 15-'country'.size

我该怎么做?

我看到What regular expression will match valid international phone numbers?,但数字大小固定为 15,与国家/地区大小无关。如果可能的话,通用方式(不提供所有国家/地区代码)应该会更好。

这里有一些必须与正则表达式匹配的示例

  • 00111111111111111
  • 001100
  • 00111111111111111
  • 00100100000000000
  • 00101000000000000(我的正则表达式不匹配,因为在这种情况下,'country' = 2 and 'number' = 13)

和不匹配

  • 00100010000000000 ('国家' = 4)

非常感谢

【问题讨论】:

  • (还有很多其他人)
  • 我看到了,但我更喜欢(如果可能的话)有一个通用的方式,而不是给出国家代码列表。此外,在这些示例中,“数字”最大大小固定为 15,与国家/地区大小无关。
  • 002010000000 有效,而 002010000000 无效。但这是相同的输入。那你怎么检查呢?
  • 我不明白你的意思 Thomas 对不起。如果我们找到至少一种正则表达式与模型匹配的方式(您给出的第一个输入),那么结果是可以的,002010000000 匹配。但如果没有办法测试所有的可能性,那就没问题了。
  • 我的意思是如果国家代码是 20 并且电话号码是 1000000 这是一个有效的号码,但是如果代码国家是 201 并且号码是 000000 它具有相同的表示 201000000 但它在一个有效案例而不是其他

标签: javascript regex


【解决方案1】:

使用这种模式

^00(?=[1-9]\d{0,2}[1-9])(?=\d{2,15}$)\d+$

这里是解释

^00 字符串应以 00 开头。

(?=[1-9]\d{0,2}[1-9]) 确保我们在最多两位数之后有一个非零数字。

(?=\d{2,15}$) 确保我们至少有 2 位数字,最多 15 位数字,这是国家和号码的最小和最大长度。

\d+ 匹配所有剩余的数字。

【讨论】:

    【解决方案2】:

    因为我不知道“国家”的大小,所以我假设所有可能的情况(0、1 或 2)并推断出“数字”的大小。 :

    ^00[1-9][1-9][0-9]{0,13}$|^00[1-9][0-9][1-9][0-9]{0,12}$|^00[1-9][0-9]{2}[1-9][0-9]{0,11}$
    

    【讨论】:

      猜你喜欢
      • 2011-03-21
      • 2011-09-04
      • 1970-01-01
      • 1970-01-01
      • 2014-03-02
      • 1970-01-01
      • 1970-01-01
      • 2013-08-05
      • 1970-01-01
      相关资源
      最近更新 更多