晚上制作一个报名通道,期间要在提交前检查各项内容是否符合标准,
遇到电话号码的时候,当时随手写了一个简单的判断
1 2 3 4 5 6 7 | <script type="text/javascript"> if (document.demofrom.phone.value.length<>11){ alert('error'); }else{ alert('true'); } </script> |
不过,这个方法很快就出现了弊端,只要输入11个任何字符都可以绕过,把1循环11次也可以。
于是,考虑用自己并不熟悉的正则。刚开始的时候,写的表达式很简单
1 2 3 4 5 6 7 8 9 10 | <script type="text/javascript"> var reg_phone = new RegExp ("^[0-9]{11}$"); if (!reg_phone.test(document.demofrom.phone.value)){ alert('error'); }else{ alert('true'); } </script> |
这样似乎问题不大了,不过,上线1个小时后,就有站内信提问无法输入号码的问题。问了一下对方,原因很简单:他没有手机,只有固定电话。
好吧,或许刚开始建立表单的时候遗漏了这块,现在只能在一个框里同时判断两种格式了。
继续将正则修改成下面的样子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <script type="text/javascript"> /** *手机号码 *中国移动134,135,136,137,138,139,150,151,157,158,159号码段 *中国联通的131,132,133,153,155,156号码段 *中国电信3G手机号码段188 *中国网通3G手机号码189号码段 *固定电话区号最小3位,最大4位 *固定电话号码段5位至8位不等 */ var reg_phone = new RegExp ("(^1((3|5)[0-9]|8[8-9])[0-9]{8}$)|(^0[0-9]{2,3}-[0-9]{5,8}$)"); if (!reg_phone.test(document.demofrom.phone.value)){ alert('error'); }else{ alert('true'); } </script> |
这样总ok了把~~不过,万恶的19楼为什么还会出现怪物级的用户,下班的时候,有人打电话过来,说无法输入。
我电话里询问对方,原来他没有输入区号。我建议他输入,结果他骂我有病。
囧,这年头输入区号的要求也成了有病,果然是有才的网友。
为了快点下班,我只能再次修改为下面这个样子。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <script type="text/javascript"> /** *手机号码 *中国移动134,135,136,137,138,139,150,151,157,158,159号码段 *中国联通的131,132,133,153,155,156号码段 *中国电信3G手机号码段188 *中国网通3G手机号码189号码段 *固定电话区号最小3位,最大4位 *固定电话号码段5位至8位不等 *有人或许不习惯写区号 *香港台湾澳门等地区号为0085x,因为香港手机和台湾号码为8位。故暂时不做单独考虑 */ var reg_phone = new RegExp ("(^1((3|5)[0-9]|8[8-9])[0-9]{8}$)|(^0[0-9]{2,3}-[0-9]{5,8}$)|(^[0-9]{5,8}$)"); if (!reg_phone.test(document.demofrom.phone.value)){ alert('error'); }else{ alert('true'); } </script> |
短短的一个号码验证竟然折腾成这样,哎~~交互不好当,还好我不是这行的~~自我安慰一下~~