Regexp for phone和Match in JQuery

时间:2016-07-18 11:14:05

标签: jquery regex phone-number

我想在jQuery中为电话号码创建一个正则表达式。我的代码:

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

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

我使用这个表达式因为我想支持那样的(+11)111111111,但我想支持:

  • 555333222
  • 555 333 222
  • (11)555333222
  • (11)555 333 222
  • (+ 11)555333222

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

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

我没有比赛。

1 个答案:

答案 0 :(得分:1)

要匹配您提供的数字,您需要在括号内的区号后面实际匹配一个或零个空格,点或连字符,并且只捕获并在前三个数字后引用分隔符:

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

请参阅regex demo

您还需要在+开头添加一个可选\+?,括号内有2位数字,并且整个前缀应该是可选的(=放在{{1}的可选组内})。

模式详情

  • (?:...)? - 字符串开头
  • ^ - 1次或0次出现:
    • (?:\(\+?[0-9]{2}\))? - 一个\(
    • ( - 一个或零\+?
    • + - 2位数
    • [0-9]{2} - 结束\)
  • ) - 1或0个空格,圆点或连字符
  • [ .-]? - 3位数
  • [0-9]{3} - 第1组捕获分隔符(空格,点或连字符)
  • ([ .-]?) - 3位数
  • [0-9]{3} - 捕获到第1组的相同分隔符
  • \1 - 1至3位数字
  • [0-9]{1,3} - 字符串结束。