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