正则表达式无法匹配无+号的国际电话号码问题求助
解决电话号码正则无法匹配无+号国际号码的问题
我编写了一个匹配电话号码的正则表达式,它能成功匹配以下格式的号码:
- 01234 567 890
- 01234 567890
- +441234567890
- (555) 555-1234
- (555)5551234
使用的正则表达式为:
/\s*(([+](\s?\d)([-\s]?\d)|0)?(\s?\d)([-\s]?\d){9}|[(](\s?\d)([-\s]?\d)+\s*[)]([-\s]?\d)+)\s*/;
但这个表达式无法匹配类似441234567890的号码——也就是去掉+号的国际号码格式。
问题分析
原正则里的国际号码匹配分支[+](\s?\d)([-\s]?\d)强制要求以+开头,所以不带+的纯数字国际号码自然匹配失败。
修改后的正则表达式
把+号改成可选匹配(用[+]?替代[+]),调整后就能覆盖无+号的国际号码场景:
/\s*(([+]?(\s?\d)([-\s]?\d)|0)?(\s?\d)([-\s]?\d){9}|[(](\s?\d)([-\s]?\d)+\s*[)]([-\s]?\d)+)\s*/;
验证效果
修改后的正则现在可以成功匹配:
- 原有的所有格式号码
- 无+号的国际号码
441234567890
内容的提问来源于stack exchange,提问作者charlie
相关产品推荐
相关产品推荐

