Home  >  Q&A  >  body text

javascript - js验证是否为特选手机号码

巴扎黑巴扎黑2772 days ago948

reply all(6)I'll reply

  • PHP中文网

    PHP中文网2017-04-10 15:40:23

    重新回答下,感谢 @Honwhy 指出问题。

    判断ABCD的方法:

    var isABCD = function(str){
        return !!new RegExp('('+str+')').exec('0123456789');
    }
    

    reply
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-10 15:40:23

    // 手机号码正则待补充,或者在SF其他问题中可以到相关答案
    // 取出最后四位数字后

    /**
     * @param str 4 digit
     */
    function isMatch(str) {
        var arr = [];      
        str.split('').forEach(function(item) {
            if(arr.indexOf(item) == -1) {
                arr.push(item);
            }
        });
        if(arr.length == 1 || arr.length == 2 || arr.length == 4) {
            return true;
        }
        return false;
    }    
    isMatch("1112"); // true
    isMatch("1123"); // false
    isMatch("1122"); // true
    isMatch("1233"); // false
    isMatch("1222"); // true
    isMatch("1234"); // true
    

    reply
    0
  • ringa_lee

    ringa_lee2017-04-10 15:40:23

    javascriptfunction isAdjacent(a, b){
        return a.charCodeAt()+1 === b.charCodeAt();
    }
    function isSpecail(mobile){
        var tailNum; 
        if (mobile.length != 11){
            return false;
        }
        tailNum = mobile.slice(-4);
        if (tailNum.slice(0,3) === tailNum.slice(-1) && "AB".indexOf(tailNum[0]) >= 0){ // AAAA or BBBB mode
            return true;
        }else if (tailNum.slice(0,2) === tailNum.slice(-2) && "A".indexOf(tailNum[0]) >= 0){
            if(tailNum[0] === tailNum[1] && isAdjacent(tailNum[1], tailNum[2])) { // AABB mode
                return true;
            }else if (isAdjacent(tailNum[0], tailNum[1])){  // ABAB mode
                return true;
            }
        }else if ((tailNum.slice(0,2) === tailNum.slice(1,3) || tailNum.slice(-2) === tailNum.slice(1,3)) && (isAdjacent(tailNum[0], tailNum[1]) || isAdjacent(tailNum[2], tailNum[3])) && "B".indexOf(tailNum[3]) >= 0){  // AAAB or ABBB mode
            return true;
        }else if (isAdjacent(tailNum[0], tailNum[1]) && isAdjacent(tailNum[1], tailNum[2]) && isAdjacent(tailNum[2], tailNum[3]) && "A".indexOf(tailNum[0]) >= 0){
            return true;
        }
        return false;
    }
    

    使用indexOf的地方支持扩展。例如: 四个全等的可将"AB" 改成 '0123456789'

    reply
    0
  • PHP中文网

    PHP中文网2017-04-10 15:40:23

    经过今天一天正则表达式的简单学习(主要是根据自己的需求有选择的进行的临时学习),最后我自己的解决方案如下:

    function checkNum(mobile)
        {
            var typeNum = new Array("0123","1234","2345","3456","4567","5678","6789");
            var result = typeNum.indexOf(mobile);
            return (result>=0)?true:false;
        }
    
        function check(mobile)
        {
            var reMobile1 = /^(?=\d{4}$)(\d)\1(\d)\2/;//匹配AABB AAAA类型 
            var reMobile2 = /^(?=\d{4}$)(\d)(\d)\1\2/;//匹配ABAB
            var reMobile3 = /^(?=\d{4}$)(\d)\1{2}/;//匹配AAAB
            var reMobile4 = /^(?=\d{4}$)(\d)(\d)\2{2}/;//匹配ABBB
            if (reMobile1.test(mobile) || reMobile2.test(mobile) || reMobile3.test(mobile) || reMobile4.test(mobile) || checkNum(mobile)){
                return false;
            }else{
                return true;
            }
        }
        check("1234");//自行测试
    

    ABCD这个特殊类型没有通过正则写出来,还在研究中,研究出来再和大家共享。js正则表达式语法

    大家有不太懂得可以参考上面的,我基本上就是参考的上面的内容。有什么不懂得 也可以提出大家一起讨论学习下。

    reply
    0
  • PHP中文网

    PHP中文网2017-04-10 15:40:23

    看楼主已经用正则搞出了除ABCD类型外其他情况的正则匹配,我补充一下判断ABCD型特选号码的方法,经测试是OK的。

    function isABCD(str){
      var num,arr=[],onestep=0;
      for(var i=1;i<=4;i++){
        var num=parseInt(str.substr(str.length-i,1),0);
        if(!isNaN(num) && arr.length>=i-2 && arr[i-2]-num==1){
          onestep++;
       }
       arr.push(parseInt(num));
     }
     return onestep<3?false:true;
    }
    
    console.log(isABCD("1234"));  //true
    console.log(isABCD("1235"));  //false
    
    console.log(isABCD("0123"));  //true
    console.log(isABCD("4567"));  //true
    console.log(isABCD("5678"));  //true
    
    console.log(isABCD("0234"));  //false
    console.log(isABCD("13125636789")); //true
    console.log(isABCD("13625636879"));  //false
    

    reply
    0
  • 高洛峰

    高洛峰2017-04-10 15:40:23

    自己改改正则

    js
    /** * * @descrition:判断输入的参数是否是个合格的手机号码,不能判断号码的有效性,有效性可以通过运营商确定。 * @param:str ->待判断的手机号码 * @return: true表示合格输入参数 * */ var isCellphone = function(str) { /** *@descrition:手机号码段规则 * 13段:130、131、132、133、134、135、136、137、138、139 * 14段:145、147 * 15段:150、151、152、153、155、156、157、158、159 * 17段:170、176、177、178 * 18段:180、181、182、183、184、185、186、187、188、189 * */ var pattern = /^(13[0-9]|14[57]|15[012356789]|17[0678]|18[0-9])\d{8}$/; return pattern.test(str); } /** * @descrition:判断输入的参数是否是个合格的固定电话号码。 * @param:str->待验证的固定电话号码。 * @return : true表示验证合格。 * **/ var isfixedphone = function(str) { /** * @desctition:规则->区号3-4位,号码7-8位,可以有分机号,分机号为3-4为,格式如下:"0775-85333333-123" */ var pattern = /^\d{3,4}-\d{7,8}(-\d{3,4})?$/; return pattern.test(str); }

    reply
    0
  • Cancelreply