zoukankan      html  css  js  c++  java
  • 正则表达式使用总结

    正则学习模拟网站:https://regexr.com/
    正则语义
    基本格式  / ^     $/g     (^以什么开始,$以什么结束,g全局模式)
    ^         表达式以什么开始,或者是取非(取反) 
              ^[0-9] 以数字开头
              ^[a-z] 以小写字母开始
              [^0-9] 取反,非数字
              [^a-z] 非小写字母
    $         表达式以什么作为结尾        /^d{6}$/   6位数字的验证码
    g         全局
    i          忽略大小写  (看下面例子)
    .          任意字符  如 /./g
              转义      如/3.14/g
    w        阿拉伯数字,大小写字母,下划线均可匹配( 1~9  a~z  A~Z  _ )
    W        w的补集
    d        仅匹配数字
    D        d的补集
    s         匹配所有空白,如换行,空格,tab
    S        s补集
    [adqu]     a d q u四个字母均可匹配
    [a-k]     a-k之间的字母均可匹配
    [1-6]     1-6之间的数字均可匹配
    [A-K]     A-K之间的字母均可匹配
    [u4e00-u9fa5] 匹配所有汉字   这是Unicode编码
    
    yo+       o可出现一次或多次  即yoo yooooo均可匹配
    栗子:    /[yY][oO]+/g     匹配yoO YoOO YoOo yooo等 
    
    yo*        o可出现零次或多次
    栗子:   /[yY]o+[~!.]*/    分解: [yY]  yY均可匹配 ; o+  o,oo,ooo等均可匹配 ; [~!.]*  零个或多个~!.等均可匹配          栗子功能,可匹配yooo~~  Yoo  Yoo.  等
    
    yo?           o可出现零次或一次
    yo{1,4}     o可出现1次到4次(自定义重复次数)
    yo{3}        只匹配o出现3次的
    yo{3,}       o可出现3次到多次
    
    (.+)           ()表示分组
    
    提取正则表达式里的组
    提取日期里的月份
           var str="2018-11-16";
           var array=str.match(/(d{4})[-](d{2})[-](d{2})/g);    //一个()代表一个组
           console.log(array);  //["2018-11-16"]
           //正则表达式对象.$2   表示提取正则表达式的第2组
           console.log(RegExp.$2);  // 11
    
    将所有h或H替换成S
    var str="HhpphH";
    str=str.replace(/[h]/gi,"S");   // g全局,i忽略大小写   等同于/[hH]/g
    console.log(str);   //SSppSS
    
    创建正则表达式对象
      //对象创建完毕---
       var reg=new RegExp(/^d{5}$/);
      //字符串
       var str="10086";
      //调用方法验证字符串是否匹配
       var flag=reg.test(str);
       console.log(flag);
    
    字面量的方式创建正则表达式对象
        var reg=/d{1,5}/;
        var flag=reg.test("8884");
        console.log(flag);
    
    正则验证IP地址
    <!DOCTYPE html>
    <html>
    
    <head>
        <meta charset="utf-8" />
        <title>demo</title>
        <link rel="stylesheet" href="../../css/lib/bootstrap.min.css">
    </head>
    <body>
        <div>
            <input type="text" class="form-control form-control-sm" placeholder="ipv4格式,例:192.168.2.56"  id="isitIP">
            <span class="text-danger" id="isornotIP"></span>
        </div>
    
        <script>
            isitIP.oninput=function(){
                function isNull(param){
                    return !param && param!==0 && typeof param!=="boolean"?true:false;
                }
                function isIP(strIP){
                    if (isNull(strIP)){
                        return false;
                    }
                    var re=/^(d+).(d+).(d+).(d+)$/g;
                    if(re.test(strIP)){
                        if( RegExp.$1 <256 && RegExp.$2<256 && RegExp.$3<256 && RegExp.$4<256) return true;
                    }
                    return false;
                }
                var e=this.value;
                var result=isIP(e);
                if(result){
                    document.getElementById("isornotIP").innerText="";
                }else{
                    document.getElementById("isornotIP").innerText="ipv4格式不符合要求";
                }
                if(e==""){
                    document.getElementById("isornotIP").innerText="请输入对应记录值";
                }
            }
        </script>
    </body>
    </html>
    

    封装正则验证函数便于调用

    const RULE = {
        /** 
         * @name 验证端口规则,例如:8080,1-65535,或all
         * @param {String} t 需要验证的值
         */
        portRange: (t) => {
            if ("all" === t.toLowerCase()) return !0;
            var a = (e) => {
                return /[1-9]{1,5}/.test(e) && e <= 65535
            };
            if (-1 === t.indexOf("-")) return a(t);
            var i = t.split("-");
            return a(i[0]) && a(i[1]) && +i[0] < +i[1]
        },
        /** 
         * @name 验证IP范围规则,例如:180.76.1.0/24,或180.76.1.0,或all(所有IP)
         * @param {String} t 需要验证的值
         */
        remoteIP: (t) => {
            if ("all" === t.toLowerCase()) return !0;
            var n = convertCidrToBinary(t),
                d = t.split("/")[1] || 32;
            if (n.substring(+d, n.length).indexOf("1") > -1) return !1;
            return new RegExp(RULE.IP_CIDR).test(t)
        },
        /** 
         * @name 验证公钥,必须含有ssh-rsa
         * @param {String} t 需要验证的值
         */
        sshRsa: (t) => {
            return (/^ssh-rsa/.test(t))
        },
        /** 
         * @name 验证规则,大小写字母、数字以及-_/.特殊字符,必须以字母开头,长度1-65
         * @param {String} t 需要验证的值
         */
        name65: (t) => {
            return (/^[a-zA-Z][w-/.]{0,64}$/.test(t))
        },
        /** 
         * @name 验证规则,大小写字母、数字、中文以及-_/.特殊字符,必须以字母开头,长度1-65
         * @param {String} t 需要验证的值
         */
        nameCn65: (t) => {
            return (/^[a-zA-Z][u4e00-u9fa5w-/.]{0,64}$/.test(t))
        },
        /** 
         * @name 验证规则,大小写字母、数字,长度8-19
         * @param {String} t 需要验证的值
         */
        IDnumber19: (t) => {
            return (/^[a-zA-Z][u4e00-u9fa5]{8,19}$/.test(t))
        },
        /** 
         * @name 验证规则,中文,长度1-40
         * @param {String} t 需要验证的值
         */
        Cn40: (t) => {
            return (/^[u4e00-u9fa5]{1,40}$/.test(t))
        },
        /** 
         * @name 验证规则,英文,长度1-200
         * @param {String} t 需要验证的值
         */
        En200: (t) => {
            return (/^[a-zA-Z]{1,200}$/.test(t))
        },
        /** 
         * @name 验证规则,数字,长度6
         * @param {String} t 需要验证的值
         */
        pcode: (t) => {
            return (/^d{6}$/.test(t))
        },
        /** 
         * @name 验证规则,座机区号;
         * @param {String} t 需要验证的值
         */
        zone: (t) => {
            return (/^(0d{3})$/.test(t))
        },
        /** 
         * @name 验证规则,座机号;
         * @param {String} t 需要验证的值
         */
        zonenub: (t) => {
            return (/^d{7}$/.test(t))
        },
        /** 
         * @name 验证规则,大小写字母、数字、中文以及-_/.特殊字符,必须以字母开头,长度1-65
         * @param {String} t 需要验证的值
         */
        nameCnUndefault65: (t) => {
            return (/^(?!default)[a-zA-Zu4e00-u9fa5][u4e00-u9fa5w-\_/.]{0,64}$/.test(t))
        },
        /** 
         * @name 验证规则,8~32位字符,英文、数字和符号必须同时存在,符号仅限!@#$%^*()
         * @param {String} t 需要验证的值
         */
        adminPassword: (t) => {
            return (/[!@#$%^*()]/.test(t) && /^[a-zA-Zd!@#$%^*()]+$/.test(t))
        },
        /** 
         * @name 验证规则,手机号规则
         * @param {String} t 需要验证的值
         */
        isMobile: (t) => {
            return (/^(1[3-9][0-9])d{8}$/.test(t) && /^[a-zA-Zd!@#$%^*()]+$/.test(t))
        },
        /** 
         * @name 验证规则,邮箱规则
         * @param {String} t 需要验证的值
         */
        }
    
    调用:
    $("#exampleName").on("input",function(){
            if(RULE.name65(this.value)){
                $(this).siblings("span").text("");
            }else{
                $(this).siblings("span").text("名称不符合规则:支持大小写字母、数字以及-_ /.特殊字符,必须以字母开头,长度1-65");
            }
            if($(this).val()==""){
                $(this).siblings("span").text("");
            }
        })
    
    利用正则表达式匹配相应数据,用到match方法
    var str="中国移动:10086,中国联通:10010,中国电信:10000";
    //把里面所有的数字全部显示出来
    var arr=str.match(/d{5}/g);  
    console.log(arr);  //打印出 ["10086","10010","10000"]
    
    注释:match()方法
    match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。
    该方法类似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置。
    用法:
    stringObject.match(searchvalue)
    stringObject.match(regexp)
    返回的是存放匹配结果的数组。该数组的内容依赖于 regexp 是否具有全局标志 g。没有g就不会全局匹配,结果会不准确
    
    利用正则表达式替换字符串里的数据,用到replace方法
           var str="大黄啊,大黄啊,你是大黄";
           str=str.replace(/大黄/g,"小黑");
           console.log(str);  //小黑啊,小黑啊,你是小黑
    
  • 相关阅读:
    通过日期获取星期几,通过日期获取凌晨、上午、中午、下午、晚上
    asp.net 格式化显示时间为几个月,几天前,几小时前,几分钟前,或几秒前
    继承和多态 复习
    .net 缩略图 宽高比 .js缩略图 宽高比
    显示实现接口和实现接口的区别
    HDMI信号解析
    锂电池充电过程
    HDMI接口基础知识及硬件设计
    HDMI传输原理:TMDS
    为什么有些信号线串接33R小电阻?
  • 原文地址:https://www.cnblogs.com/huihuihero/p/10801102.html
Copyright © 2011-2022 走看看