我想在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,但我想支持:
但是,当我将表达式更改为
时var name_regexp = /\(?([0-9]{3})\)?([ .-]?)([0-9]{3})\2([0-9]{4})/;
我没有比赛。
答案 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}
- 字符串结束。