如何编写符合指定规则的含横杠13位电话号码校验正则表达式
符合要求的电话号码校验正则实现
你当前编写的/^(?:[0-9]-*){13}$/存在逻辑错误:该正则要求匹配13组「数字+任意数量横杠」的组合,会强制至少出现13个数字,既无法满足总长度为13的要求,也不能限制横杠的数量范围。
正确正则表达式
/^(?=^.{13}$)(?=[0-9])(?=(?:[^-]*-){1,3}[^-]*$)[0-9-]+$/
规则匹配逻辑拆解
(?=^.{13}$):正向先行断言,限制整个字符串总长度恰好为13个字符,匹配总长度规则(?=[0-9]):正向先行断言,限制首字符必须为数字,匹配首字符规则(?=(?:[^-]*-){1,3}[^-]*$):正向先行断言,统计横杠出现次数为1~3次,匹配横杠数量规则[0-9-]+$:限制整个字符串仅能由数字和横杠两种字符组成
测试验证样例
- 合法样例:
189-1234-5678(总长度13、2个横杠、首字符为数字) - 非法样例:
-189123456789:首字符为横杠,违反首字符规则1891234567890:无横杠,违反横杠数量下限规则1-8-9-1-2345678:共4个横杠,违反横杠数量上限规则189-1234-567:总长度仅12,违反总长度规则
内容的提问来源于stack exchange,提问作者Lucas
相关产品推荐
相关产品推荐

