固话座机验证

国内座机,有3位区号+8位号码,和4位区号+8位号码。这里只验证3+8模式:xxx-xxxxxxxx,并总结当中可能会出现的问题


若正则是

/\d{3}-\d{8}/

'010-12345678'会验证通过,'010-1234567890'也会通过,'01022-1234567890'继续通过

所以,这个正则是有问题的。这个正则没有强调3+8的首尾位置关系,那么一个数字字符串,只要包含xxx-xxxxxxx就是对的,即使是'01022-1234567890',因为它内部包含的022-12345678是合法的

正确做法

/^\d{3}-\d{8}$/,

用^和$分别强调下首尾,也可以使用单词边界符\b,起到相同作用:

/\b\d{3}-\d{8}\b/




问题:正则是处理字符串的工具,不过传入数值它也能判断,但是有些问题要注意

如果传入的数值是0开头,它会自动忽略:

/\d{5}/.test(01234)为false

/\d{5}/.test('01234')为true

但是,假如强调开始和结束时:

/\b\d{5}\b/.test(012345)为false,这时它没有忽略0的存在,但是上面计算位数时又忽略

/\b\d{5}\b/.test(12345)为true

综上所述,为了防止不必要的问题,最好数字也用字符串传入验证。不过,前端js获取的数值通常已经是字符串



你可能感兴趣的:(固话座机验证)