phone 的正则表达式和 JQuery 中的匹配

Regexp for phone and Match in JQuery

我想为 jQuery 中的 phone 个数字创建一个正则表达式。我的代码:

var name_regexp = /\(\+?([0-9]{2})\)?([ .-]?)([0-9]{3})([0-9]{3})([0-9]{1,3})/;

  if (($phone).match(name_regexp))
  /*do sth */

我使用这个表达式是因为我想支持这样的事情 (+11)111111111,但我正在努力支持:

但是,当我将表达式更改为

var name_regexp = /\(?([0-9]{3})\)?([ .-]?)([0-9]{3})([0-9]{4})/;

我没有匹配到。

要匹配您提供的数字,您需要在括号内的区号之后实际匹配一个或零个 space、点或连字符,并且只捕获和反向引用前 3 个分隔符位数:

/^(?:\(\+?[0-9]{2}\))?[ .-]?[0-9]{3}([ .-]?)[0-9]{3}[0-9]{1,3}$/
                      ^^^^^^        ^^^^^^^^        ^

参见regex demo

你还需要允许一个可选的 +\+? 开始,括号内有 2 位数字,并且整个前缀应该是可选的(=放在可选组中 (?:...)?).

图案详情:

  • ^ - 字符串开头
  • (?:\(\+?[0-9]{2}\))? - 出现 1 次或 0 次:
    • \( - 一个 (
    • \+? - 一或零 +
    • [0-9]{2} - 2 位数
    • \) - 收盘 )
  • [ .-]? - 1 或 0 space、点或连字符
  • [0-9]{3} - 3 位数
  • ([ .-]?) - 第 1 组捕获分隔符(space、点或连字符)
  • [0-9]{3} - 3 位数
  • </code> - 捕获到第 1 组的相同分隔符</li> <li><code>[0-9]{1,3} - 1 到 3 位数
  • $ - 字符串结尾。