javascript - js验证是否为特选手机号码
巴扎黑
巴扎黑 2017-04-10 15:38:23
0
6
958
  • 特选类型

    后四位数字是否是AAAB AABB ABAB AAAA ABBB ABCD 的类型
    使用js验证手机号码后四位是否是上述所描述的类型 这个我最初想到的使用正则,难道要对每一种都写一个正则吗?还是有其他的处理方式?欢迎大家指点?正则不太会。如果可以用正则的话也行,顺便也学习下正则,个人感觉写正则更加是思路的产物,需要学习。。

巴扎黑
巴扎黑

reply all(6)
洪涛

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

判断ABCD的方法:

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

// 手机号码正则待补充,或者在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
左手右手慢动作
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'

洪涛

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

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正则表达式语法

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

洪涛

看楼主已经用正则搞出了除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
小葫芦

自己改改正则

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); }
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template