• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >编程问答 > js验证是否为特选手机号码

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

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-07

佚名通过本文主要向大家介绍了js验证手机号码,js正则验证手机号码,js验证身份证号码,js验证电话号码,js表单验证手机号码等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:js验证是否为特选手机号码
描述:

  • 特选类型

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


解决方案1:

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

function isABCD(str){
  var num,arr=[],
  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

解决方案2:

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

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

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

解决方案3:

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'

解决方案4:

// 手机号码正则待补充,或者在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

解决方案5:

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

判断ABCD的方法:

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


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

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

相关文章

  • 2017-06-07 使用Python的爬取新浪新闻有问题??
  • 2017-06-07 (python)pandas如何对上千万数据分组“快速”取第一行和最后一行?
  • 2017-06-07 5个shell脚本问题
  • 2017-06-07 提问后可以修改问题吗
  • 2017-06-07 探索Python、机器学习和NLTK库
  • 2017-06-07 关于删除保存在七牛服务器文件的问题
  • 2017-06-07 Exchange2003布署DomainKeys,谁知道?
  • 2017-06-07 (golang)能否为go的基本类型如int实现某个接口?
  • 2017-06-07 (python)关于时间转换的问题
  • 2017-06-07 Python开发论坛

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • py文件转exe的疑难问题
    • (golang)martini框架中为什么向http头添加一个header就能防范xss攻击?
    • 报错:TemplateDoesNotExistat/login/如何修改templates路径
    • 请问这段代码的时间复杂度为什么是O1?
    • (python)如何用subprocess执行任意脚本?
    • laravel表单验证失败如何防止原表单数据都被清空?
    • redis、memcache、mongoDB有哪些区别?
    • 求大神解释下面的汇编语言是什么意思
    • VC中如何申请一个空间为40个字节的LPSTR,并初始化为空?
    • 对话框打开时命令无法执行suprocess执行命令,中文乱码

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有