JavaScript电话号码校验正则未返回预期结果,求排查问题
电话号码正则校验问题修复
原代码存在的核心问题
- 未添加正则结束匹配标记
$,仅校验字符串开头符合规则,未限制整串格式,同时末尾仅匹配1位数字,缺少后3位号码的匹配逻辑 - 误用
\w作为分隔符匹配规则:\w可匹配字母、数字、下划线,电话号码规则不允许出现这类非法字符 - 没有做括号配对校验,允许出现单独的左/右括号,不符合号码格式要求
- 分隔符匹配逻辑过于松散,没有限定合法分隔符仅为空格、短横线
修复后的实现
我们需要匹配的北美电话号码规则如下:
- 可选前缀国家码
1,后可跟空格/短横线或无分隔 - 3位区号可选择用配对括号包裹,或直接展示
- 区号、3位前缀号、4位后缀号之间的合法分隔符仅为空格、短横线或无分隔
- 整串必须完全符合格式,不能有多余字符
修复后代码
function telephoneCheck(str) { let reg = /^1?[ -]?(\(\d{3}\)|\d{3})[ -]?\d{3}[ -]?\d{4}$/; return reg.test(str); } console.log("function: " + telephoneCheck("1 (555) 555-5555")); // 输出结果为 true
正则说明
^1?:匹配开头可选的国家码1[ -]?:匹配可选的空格或短横线分隔符(\(\d{3}\)|\d{3}):匹配3位区号,要么带配对括号,要么不带括号\d{3}:匹配3位前缀号码\d{4}$:匹配末尾4位后缀号码,$确保整串完全符合规则
内容的提问来源于stack exchange,提问作者Clayton Ritchey
相关产品推荐
相关产品推荐

