判断电话号码真实性原来这么麻烦

晚上制作一个报名通道,期间要在提交前检查各项内容是否符合标准,

遇到电话号码的时候,当时随手写了一个简单的判断

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>

短短的一个号码验证竟然折腾成这样,哎~~交互不好当,还好我不是这行的~~自我安慰一下~~

Related posts

《判断电话号码真实性原来这么麻烦》有4个想法

  1. 电话验证确实不好弄,必须考虑到多种可能性,移动、联通、电信的电话号码各有各的规律,固话的号码最复杂,这些规律都明确之后再用正则表达式一个个套……
    不是说程序多难写,而是条件太多了……

发表评论