09-正则表达式

一、什么是正则表达式

    <!-- 正则表达式(Regular Expression)是用于匹配字符串中字符组合的模式 -->
    <!-- 作用:
      正则表达式被用来检索、替换哪些符合某个模式(规则)的文本 
      例如验证表单:用户名表单只能输入英文字母、数字或者下划线,昵称输入框中可以输入中文(匹配)
    -->
    <!-- 正则表达式的特点
      1.灵活性、逻辑性和功能性非常的强.
      2.可以迅速地用极简单的方式
      3.对于刚接触的人来说 比较晦涩难懂 比如:^\w+([-+.]\w+)*@\w+([-.\]+)*\.\w
      4.实际开发,一般都是直接复制写好的正则表达式。
      但是要求会使用正则表达式并且根据实际情况修改表达式。比如用户名:/^[a-z0-9_-]{3,16}$/
    -->

二、创建正则表达式

    <script>
        //正则表达式在js中的使用

        //利用RegExp对象来创建正则表达式

        //1.利用字面量创建正则表达式
        var regexp = new RegExp(/123/);
        console.log(regexp);

        //2.利用字面量创建正则表达式
        var rg = /123/

        //3.test方法用来检测字符串是否符合正则表达式要求的规范 正确true 错误false
        console.log(rg.test(123));
        console.log(rg.test('abc'));
    </script>

三、边界符

    <script>
        //边界符
        var rg = /abc/ //正则表达式里面不需要加引号 不管是数字型还是字符串型

        // /abc/只要包含有abc这个字符串返回的都是true
        console.log(rg.test('abc'));
        console.log(rg.test('abcd'));
        var rg = /123/
        console.log(rg.test(123));

        var rg2 = /^abc/ //必须以abc开头
        console.log(rg2.test('aabc'));
        console.log(rg2.test('abc'));
        console.log('----------');
        var reg3 = /^abc$/ //$结尾  代表必须是abc这个字符串  精确匹配
        console.log(reg3.test('abc'));
    </script>

四、字符类

    <script>
        //字符类:[]表示有一系列字符开供选择 只要匹配其中一个就可以了
        var reg = /[abc]/ //包含abc其中一个就为true
        console.log(reg.test('and'));
        console.log(reg.test('baby'));
        console.log(reg.test('666'));
        console.log('------------');
        var reg1 = /^[abc]$/ //只有 a或b或c 才是true
        console.log(reg1.test('a'));
        console.log(reg1.test('b'));
        console.log(reg1.test('c'));
        console.log(reg1.test('ab'));
        console.log('------------');
        var reg2 = /^[a-z]$/ //26个字母任意一个都为true
        console.log(reg2.test('w'))
        console.log('------------');

        //字符组合
        var reg3 = /^[a-zA-Z0-9]$/ //26个字母大小写都可以和数字
        console.log(reg3.test('W'));
        console.log(reg3.test('5'));

        console.log('------------');
        var reg4 = /^[^a-zA-Z0-9_-]$/ //第一个^表示以..开头 第二个^表示取反 不能包括里面的内容
        console.log(reg4.test('!'));
    </script>

五、量次符

    <script>
        //量词符:用来设定某个模式出现的次数
        //简单理解:就是让下面的a这个字符重复多少次
        var rg = /^a$/;
        //*相当于>=0可以出现0次或者很多次
        var reg = /^a*$/
        console.log(reg.test(''));
        console.log(reg.test('a'));
        console.log(reg.test('aa'));
        console.log(reg.test('aaa'));
        console.log('------------');

        //+相当于>=1可以出现1次或者很多次
        var reg1 = /^a+$/
        console.log(reg1.test(''));
        console.log(reg1.test('a'));
        console.log(reg1.test('aa'));
        console.log('------------');

        //? 相当于1或0
        var reg2 = /^a?$/
        console.log(reg2.test(''));
        console.log(reg2.test('a'));
        console.log(reg2.test('aa'));
        console.log('------------');


        //{3}就是重复3次
        var reg3 = /^a{3}$/
        console.log(reg3.test('a'));
        console.log(reg3.test('aaa'));
        console.log('------------');

        //{3,}大于等于重复3次
        var reg4 = /^a{3,}$/
        console.log(reg4.test('aa'));
        console.log(reg4.test('aaaaa'));
        console.log('------------');

        //{3,16}大于等于3且小于等于16
        var reg5 = /^a{3,16}$/
        console.log(reg5.test('a'));
        console.log(reg5.test('aaaaaa'));
    </script>

六、用户名验证

    <input type="text" class="name"><span>请输入用户名</span>
    <script>
        //量词是设定某个模式出现的次数
        // 这个模式用户只能输入英文字母 数字 下划线 短横线但是有边界符和[]这就限定了只能多选1
        var reg = /^[a-zA-Z0-9_-]{6,16}$/

        //{6,16}之间不要有空格
        // console.log(reg.test('aW5666'));
        var ename = document.querySelector('.name')
        var span = document.querySelector('span')
        ename.onblur = function() {
            if (reg.test(this.value)) {
                span.className = 'right'
                span.innerHTML = '正确'
            } else {
                span.className = 'wrong'
                span.innerHTML = '错误'
            }
        }
    </script>

七、括号总结

    <script>
        //中括号 字符集合 匹配方括号中的任意字符
        var reg = /^[abc]$/ //a || b || c

        //大括号 量词符 里面表示重复次数
        var re = /^abc{3}$/ //让c重复3次
        var reg1 = /^[abc]{3}$/

        //小括号 表示优先级
        var reg2 = /^(abc){3}$/ //让abc重复3次
        console.log(reg2.test('abcabcabc'));
    </script>

八、预定义类

    <script>
        //预定义类是某些常见模式的简写
        var reg = /\d/ //匹配0-9之间的任一数字相当于[0-9]
        console.log(reg.test(12));
        console.log('---------');
        var reg2 = /\D/ //匹配所有0-9以外的字符,相当于[^0-9]
        console.log(reg2.test('s'));
        console.log('---------');
        var reg3 = /\w/ //匹配任意的字母、数字和下划线 相当于[A-Za-z0-9_]
        console.log(reg3.test('a_'));
        console.log('---------');
        var reg4 = /\W/ //匹配任意的字母、数字和下划线 相当于[^A-Za-z0-9_]
        console.log(reg4.test('!'));
        console.log('---------');
        var reg5 = /\s/ //匹配空格(包括换行符、制表符、空格符等),相等于[\t\r\n\v\f]
        console.log(reg5.test('  '));
        console.log('---------');
        var reg6 = /\S/ //匹配非空格的字符,相当于[^\t\r\n\v\f]
        console.log(reg6.test(' s'));
        console.log(reg6.test(' '));
        console.log('---------');
        var reg7 = /\d\S/
        console.log(reg7.test('12'));
    </script>

九、座机号验证

    <script>
        //座机号验证: 全国座机号码 两种格式:010-12345678 或 0530-1234567
        var reg = /^\d{3}-\d{8}|\d{4}-\d{7}$/
        var reg1 = /^\d{3,4}-\d{7,8}$/
        console.log(reg.test('010-12345678'));
        console.log(reg1.test('0530-1234567'));
        console.log(reg.test('222'));
    </script>

十、表单验证

    <script>
        //手机号验证
        var reg = /^(13[0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$/
        console.log(reg.test('15250721431'));

        //QQ验证
        var regQQ = /^[1-9]\d{4,}$/

        //昵称验证
        var regName = /^[\u4e00-\u9fa5]{2,8}$/
        console.log(regName.test('你好'));

        //短信验证
        var regmsg = /^\d{6}$/ //6位数字
        console.log(regmsg.test('111111'));

        //密码验证
        var regPwd = /^[\w-]{6,16}$/ //^[a-zA-Z0-9_-]{6,16}$
        console.log(regPwd.test('hzp04551-_'));
    </script>

十一、正则替换

    <textarea name="" id="msg"></textarea>
    <button>提交</button>
    <div></div>
    <!-- <script>
        //替换replace
        var str = 'andy和red'

        //var newStr = str.replace('andy', 'blue')
        var newStr = str.replace(/andy/, 'blue')
        console.log(newStr);
    </script> -->

    <script>
        var text = document.querySelector('textarea')
        var btn = document.querySelector('button')
        var div = document.querySelector('div')

        // /表达式/[switch]
        //switch(也称为修饰符)按照什么样的模式来匹配 有三种值
        //g:全局匹配
        //i:忽略大小写
        //gi:全局匹配 + 忽略大小写
        btn.onclick = function() {
            var str = text.value.replace(/sb|牛马/gi, '***')
            div.innerHTML = str
        }
    </script>
posted @ 2024-05-30 14:43  _你听得到  阅读(8)  评论(0)    收藏  举报