资讯专栏INFORMATION COLUMN

常用正则表达式及其思路详解

kevin / 3156人阅读

摘要:常用正则表达式及其思路详解注意正则表达式的匹配超大文本的效率比较低,为了匹配效率加快,最好是是先精确到小模块,再使用正则匹配,这样搜索效率会快一点。出生日期码表示编码对象出生的年月日,其中年份用四位数字表示,年月日之间不用分隔符。

常用正则表达式及其思路详解

注意:正则表达式的匹配超大文本的效率比较低,为了匹配效率加快,最好是是先精确到小模块,再使用正则匹配,这样搜索效率会快一点。

var vaildReg = {
  //判断是否为QQ号码
  isQQ:function(str){
    //1.校验首字母是不是数字,并且大于0。^[1-9]
    //2.校验QQ总长度最大为11位,最小为5位
    var reg = /^[1-9][0-9]{4,10}$/g;
    if(reg.test(str)){
      return true;
    }else{
      return false;
    }
  },
  //判断是否为手机号码
  isMobile:function(str){
    //1.手机号的第一个是1开头
    //2.手机号的第二位虽然一般都是3,4,5,7,8,但是为了防止以后再增长所以不校验第二位
    //3.手机号第三位以后的9位都是[0-9]之间的数字
    //4.总长度是11位
    var reg = /^1[0-9]{10}$/g;
    if(reg.test(str)){
      return true;
    }else{
      return false;
    }
  },
  //判断是否为合法的email邮箱
  isMail:function(str){
    //1.中间有@符号
    //2.@符号前面有至少1位数字或字母
    //3.@符号后面以什么什么.加上字母结尾
    //4.@和.com之间有至少1位数字或字母
    var reg = /^[0-9a-zA-Z.-]{1,}@[0-9a-zA-Z.-]{1,}.[a-zA-Z]+$/g;
    if(reg.test(str)){
      return true;
    }else{
      return false;
    }
  },
  //判断是否为数字
  isNumber:function(str){
    //1.开头一直到最后都是数字^d+
    var reg = /^d+$/g;
    if(reg.test(str)){
      return true;
    }else{
      return false;
    }
  },
  //判断是否全都为中文
  isAllChinese:function(str){
    //1.正则判断中文根据unicode编码来判断,中文在unicode编码中是u4e00到u9fa5,共有20901个汉字
    var reg = /^[u4e00-u9fa5]+$/gm;
    if(reg.test(str)){
      return true;
    }else{
      return false;
    }
  },
  //判断是否包含中文
  isContainChinese:function(str){
    //1.正则判断中文根据unicode编码来判断,中文在unicode编码中是u4e00到u9fa5,共有20901个汉字
    var reg = /[u4e00-u9fa5]/gm;
    if(reg.test(str)){
      return true;
    }else{
      return false;
    }
  },
  //判断是否为邮政编码
  isPostcode:function(str){
    //1.首字母不为0,再有5个任意数字
    var reg = /^[^0][0-9]{5}$/g;
    if(reg.test(str)){
      return true;
    }else{
      return false;
    }
  },
  //判断是否为合法的身份证号码,校验15位和18位身份证
  isIDcard:function(str){
    //1.15位的身份证号码是有18**|19**年出身的人
    //2.18位的身份证末尾多了一个随机校验码
    //3.身份证前6位是地址码,后8位是出身日期,再后3位是顺序码,最后一位是校验码。
    //4.地址码表示编码对象常住户口所在县(市、旗、区)的行政区划代码。
    //5.出生日期码表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。
    //6.顺序码表示同一地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。顺序码的奇数分给男性,偶数分给女性。
    //7.校验码是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。
    var reg = /^[1-9]d{5}(18|19|20)?d{2}(0[1-9]|1[0-2])(0[1-9]|[12]d|3[01])d{3}(d|X)?$/g;
    //前两位地址码规律
    var city={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江 ",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北 ",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏 ",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外 "};
    if(reg.test(str)){
      if(!city[str.substr(0,2)]){
        return false;
      }else{
        //18位身份证需要验证最后一位校验位
        if(str.length == 18){
            var arrInt = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
            var arrCh = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"];
            var sum = 0, i, residue;
            for(i=0; i<17; i++) {
              sum += str.substr(i, 1) * arrInt[i];
            }
            residue = arrCh[sum % 11];
            if (residue !== str.substr(17, 1)) return false;
        }
      }
      return true;
    }else{
      return false;
    }
  },
  //判断是否为合法http地址
  isURL:function(str){
    //1.合法URL地址,协议一定不能少,是不是https的就不所谓了
    //2.双斜杠之后,可能会存在域名地址,也可能是IP地址(可能就会带端口好了)
    //
    var reg = /^https?://[a-zA-Z0-9._-]+(:d+)?(/((.)?(?)?=?&?[a-zA-Z0-9_-](?)?)*)*$/i;
    if(reg.test(str)){
      return true;
    }else{
      return false;
    }
  },
  //判断是否为合法的IP4地址
  isIP4:function(str){
    // 1、1.1.1.1  四段  [0 , 255]
    // 2.第一段不能为0
    // 3.每个段不能以0开头
    var reg = /^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$/gi;
    if(reg.test(str)){
      return true;
    }else{
      return false;
    }
  },
  //去掉前后所有的空格,换行等
  trim:function(str){
    //1.开头空格,匹配多次^(s|
|
)+
    //2.末尾空格,匹配多次(s|
|
)+$
    str = str + "";
    var reg = /^s|s+$/gim;
    return str.replace(reg,"");
  }
}
console.log("QQ",vaildReg.isQQ("12345678901")?"校验通过":"校验失败");

console.log("手机",vaildReg.isMobile("13700000000")?"校验通过":"校验失败");

console.log("邮箱",vaildReg.isMail("1333-.@3.a")?"校验通过":"校验失败");

console.log("数字",vaildReg.isNumber("0333")?"校验通过":"校验失败");

console.log("全为中文",vaildReg.isAllChinese("你三好")?"校验通过":"校验失败");

console.log("包含中文",vaildReg.isContainChinese("33AAA你AA")?"校验通过":"校验失败");

console.log("邮政编码",vaildReg.isPostcode("123456")?"校验通过":"校验失败");

console.log("身份证号码",vaildReg.isIDcard("362321199310207836")?"校验通过":"校验失败");

console.log("URL地址",vaildReg.isURL("http://33:33/JM2X/1")?"校验通过":"校验失败");

console.log("IP地址",vaildReg.isIP4("925.255.255.255")?"校验通过":"校验失败");

console.log("去除空格:",vaildReg.trim(" 

	AAA   03
33  
"));

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/84021.html

相关文章

  • Java开发

    摘要:大多数待遇丰厚的开发职位都要求开发者精通多线程技术并且有丰富的程序开发调试优化经验,所以线程相关的问题在面试中经常会被提到。将对象编码为字节流称之为序列化,反之将字节流重建成对象称之为反序列化。 JVM 内存溢出实例 - 实战 JVM(二) 介绍 JVM 内存溢出产生情况分析 Java - 注解详解 详细介绍 Java 注解的使用,有利于学习编译时注解 Java 程序员快速上手 Kot...

    LuDongWei 评论0 收藏0
  • 软件接口测试工具Jmeter使用核心详解【建议收藏】

    用Jmeter做接口测试只需要掌握几个核心功能就可以了。 并不一定要把它所有的功能都掌握,先掌握核心功能入行,然后再根据工作需要和职业规划来学习更多的内容。这篇文章在前面接口测试框架(测试计划--->线程组--->请求--->查看结果树)的前提下,来介绍必须要掌握的几个核心功能,力求用最短的时间取得最大的成果。 在前面的文章中我提到,用Jmeter做接口测试的核心是单接口测试的参数化和关联接口测试...

    zoomdong 评论0 收藏0
  • 正则达式详解及实战

    摘要:如果你还没正式开始正则表达式,请快速浏览跳过本章节。就是一个等同于但更简略的正则表达式。如果想查找全部,就要加标识全局匹配规则正则表达式搜索字符串指定的值,从而去匹配字符串。正则表达式都是用来操作字符串的。 正则表达式 Create by jsliang on 2018-11-14 10:41:20 Recently revised in 2018-11-19 08:46:37 ...

    simon_chen 评论0 收藏0

发表评论

0条评论

kevin

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<