javascript - 关于正则表达式在电话号码判断程序中应用的一个问题。
迷茫
迷茫 2017-04-11 10:27:53
[JavaScript讨论组]

我写的电话号码判断程序。
其中有一些bug。
1.验证输入的是否为纯字符那里出错,无论输入什么字符只要位数够了都能通过。
2.我本意是,7位和8位的普通座机号码的第一位不能够是0或1,但是程序测试结果是输入什么都可以只要位数够就行了。事实证明后面的每一个判断,只要输入的位数够了,无论输入什么都会弹出正确的弹出框。
3.当我输入的位数不够的时候,点击提交,没有任何反应。





我想知道代码到底哪里出错了,我看了很久都没弄明白。刚学正则表达式,实在有些模糊,请大家赐教。如果我描述得不够清楚请大家留言。谢谢!

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Phone Number Test</title>
    <script type="text/javascript">
          function checkPhoneNumber(){
              // 输入电话号码
              var phoneNumber = document.getElementById("number").value;

              // 判断所输入的电话号码是否全是数字字符
              if (/(^[0-9]\d{3}$)|(^[0-9]\d{5}$)|(^[0-9]\d{7}$)|(^[0-9]\d{8}$)|(^[0-9]\d{11}$)/.test(phoneNumber)){

                    // 求电话号码串的长度
                    if ( phoneNumber.length == 3) {// 电话号码长度为3位的情况

                        if (phoneNumber == 110 || phoneNumber == 112 || phoneNumber == 119 || phoneNumber == 120 || phoneNumber == 122 || phoneNumber == 114) {// 确定是否为3位紧急号码 ^1[1|2][0|4|9|0]
                          /* *******验证是否位以下紧急号码*******
                          火警 119 急救 120 交警 122 公安 110 号码查询 114
                          */
                              alert("该电话号码为紧急号码!!!");
                        }else {
                          alert("你输入的电话号码为空号!!!");
                        }

                    }else if (phoneNumber.length == 5) {// 电话号码长度为4位的情况
                     /* *******验证是否位以下服务号码*******

                       公众服务号码:
                       全国铁道客服中心 12306
                       全国通信机构服务号码:
                       中国网通服务电话 10060 中国联通服务电话/中国联通客服 10010 中国铁通服务号码 10050 中国电信服务号码 10000
                       全国国家机构监督、投诉、抢修、举报电话:
                       消费维权投诉电话 12315 物价举报投诉电话 12358 地税纳税服务热线 12366 劳动和社会保障局 12333 公共卫生环境投诉 12320 全国法律服务热线 12348 环保局监督电话 12369 供电抢修服务电话 95598
                       全国保险公司服务电话号码:
                       中国人寿保险 95519 太平洋保险 95500 平安保险 95511 太平人寿保险 95589 中国人保保险 95518 天安保险 95505 大众保险 95507 华泰财险 95509 中华联合保险 95585 华安财险 95556 中国大地保险 95590
                       全国银行客户服务电话:
                       中国银行服务电话 95566 工商银行服务电话 95588 建设银行服务电话 95533 农业银行服务电话 95599 交通银行服务电话 95559 光大银行服务电话 95595 邮政储蓄服务电话 95580 民生银行服务电话 95568
                       中国银联 95516 广东发展银行服务电话 95508 深圳发展银行服务电话 95501 上海浦东发展银行电话 95528

                      */
                          if ( /(^100(86|10|00|50|60))|(^123(15|06|58|66|33|20|48|69))|(^955(19|00|89|18|05|07|09|85|56|90|66|88|33|99|59|95|80|68|16|08|01|28|98))/.test(phoneNumber)) {// 验证是否为公众服务号码
                              alert("该电话号码为公众服务号码!!!");
                          }else {
                            alert("你输入的电话号码为空号!!!")
                          }

                    }else if (phoneNumber.length == 7) {// 电话号码长度为7位的情况
                         /* *******验证是否为普通七位座机号码*******
                          普通座机号码不能用数字0开头
                         */
                         if (/^[2-9][0-9]\d{6}$/.test(phoneNumber)) {// 确定是是否为合法7位座机号码
                               alert("该电话号码为普通七位座机号码!!!");

                         }else {
                           alert("你输入的号码为空号!!!");
                         }
                    }else if (phoneNumber.length == 8) {// 电话号码长度为8位的情况
                          /* *******验证是否为普通八位座机号码*******
                          普通座机号码不能用数字0开头
                          */
                          if (/^[2-9][0-9]\d{7}$/.test(phoneNumber)) {// 确定是否为合法8位座机号码
                                alert("该电话号码为普通八位电话号码!!!");
                          }else {
                            alert("你输入的号码为空号!!!");
                          }
                    }else if (phoneNumber.length == 11) {// 电话号码长度为11位的情况
                         /* *******验证是否为普通手机号码 && 验证是否为带区号的座机号码*******

                            电信:

                            中国电信手机号码开头数字
                            2G/3G号段(CDMA2000网络)133、153、180、181、189
                            4G号段 177

                            联通:

                            中国联通手机号码开头数字
                            2G号段(GSM网络)130、131、132、155、156
                            3G上网卡145
                            3G号段(WCDMA网络)185、186
                            4G号段 176、185[1]

                            移动

                            中国移动手机号码开头数字
                            2G号段(GSM网络)有134x(0-8)、135、136、137、138、139、150、151、152、158、159、182、183、184
                            3G号段(TD-SCDMA网络)有157、187、188
                            3G上网卡 147
                            4G号段 178
                         */

                         if (/^(13[0-9]|15(0|3|5|6|7|8|9)|14(5|7)|17(6|7|8)|18(0|1|2|3|4|5|7|8|9))\d{8}$/.test(phoneNumber)) {// 普通手机号码验证
                               alert("该电话号码为普通手机号码!!!");

                         }else if (/^(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}$/) {
                               alert("该电话号码为带区号的座机号码!!!");
                         }
                    }else {
                         alert("该号码为空号!!!");
                    }

              }else {
                alert("请输入正确的电话号码长度!!!");// 输入的号码长度不正确,报错弹出

              }
          }
    </script>
  </head>
  <body>
      <h3>请输入需要判断的电话号码</h3>
      <input type="text" id= 'number' />
      <input type="button" name="name" value="submit" onclick="checkPhoneNumber()"/>
  </body>
</html>
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(1)
大家讲道理

[0-9]\d是等同的,判断字符串时去掉^[0-9]\d.

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号