晚上制作一个报名通道,期间要在提交前检查各项内容是否符合标准,
遇到电话号码的时候,当时随手写了一个简单的判断
不过,这个方法很快就出现了弊端,只要输入11个任何字符都可以绕过,把1循环11次也可以。
于是,考虑用自己并不熟悉的正则。刚开始的时候,写的表达式很简单
var reg_phone=new RegExp("^[0-9]{11}$");
if(!reg_phone.test(document.demofrom.phone.value)){alert('error');}else{alert('true');}
这样似乎问题不大了,不过,上线1个小时后,就有站内信提问无法输入号码的问题。问了一下对方,原因很简单:他没有手机,只有固定电话。
好吧,或许刚开始建立表单的时候遗漏了这块,现在只能在一个框里同时判断两种格式了。
继续将正则修改成下面的样子:
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');}
这样总ok了把~~不过,万恶的19楼为什么还会出现怪物级的用户,下班的时候,有人打电话过来,说无法输入。
我电话里询问对方,原来他没有输入区号。我建议他输入,结果他骂我有病。
囧,这年头输入区号的要求也成了有病,果然是有才的网友。
为了快点下班,我只能再次修改为下面这个样子。
短短的一个号码验证竟然折腾成这样,哎~~交互不好当,还好我不是这行的~~自我安慰一下~~
4 Comments发表回复
要发表评论,您必须先登录。
发表回复
要发表评论,您必须先登录。
怎么像网页电话?
@xiaoxiaomeng:额,仅仅是电话号码的判断罢了。
网页电话似乎还没有那么高级,呵呵~~
电话验证确实不好弄,必须考虑到多种可能性,移动、联通、电信的电话号码各有各的规律,固话的号码最复杂,这些规律都明确之后再用正则表达式一个个套……
不是说程序多难写,而是条件太多了……
嗯,是的,现在也就仅仅做到按照需求做,尽可能的精简正则也是一件头痛的事情