正则

1.正则表达式

1.正则表达式介绍

(1).正则表达式:是对 字符串进行匹配运算的 内置对象

(2).正则表达式作用:格式校验

*手机号格式 验证码格式 账号密码 邮箱格式

(3).正则表达式语法:

(1)创建正则对象 let reg=new regExp('正则表达式')

(2)调用正则对象 reg.test('字符串')

true:校验通过 false:校验不通过*/

注:js中几乎所有的对象都是new创建,js中有三个内置对象有简写语法

new Array() 简写[]

new Object() 简写{}

new Date()

new RegExp() 简写 /正则/

2.元字符与原义文本字符

正则表达式语法由两部分组成

1.原义文本字符 : 字符串本身的含义

* PS : 别多想,写什么就是什么。想的越多,错的越离谱

2.元字符 : 改变了字符串本身的含义, 类似于js中的关键字

[] {} () . \ + ? * ^ $ |

// /黑马/:检测字符串中有没有黑马 
      console.log(/黑马/.test('一匹黑色的马')) //false
      console.log(/黑马/.test('黑马程序员')) //true

      // /abc/:检测字符串中有没有abc
      console.log(/abc/.test('a1b2c3')) //false
      console.log(/abc/.test('abc123')) //true

3.字符类

[] : 字符类

      /abc/    : 原义文本字符。 检测字符串有没有 abc

    /[abc]/  : 字符类。 将a 或 b 或 c归为一类,满足任意一个即可.

      说人话: 检测字符串中有没有 a 或 b 或 c

    /[^abc]/ : 反向类。 将不是a 或 不是b 或 不是c的归为一类,满足任意一个即可。

      说人话: 检测字符串中有没有除 abc之外的任意字符

console.log(/[abc]/.test('a123'))   //true
    console.log(/[abc]/.test('a1b2c3')) //true
    console.log(/[abc]/.test('abc123')) //true
    console.log(/[abc]/.test('123456')) //false
    console.log(/[abc]/.test('abcabc')) //true
    console.log('----------------------')
    console.log(/[^abc]/.test('a123'))   //true
    console.log(/[^abc]/.test('a1b2c3')) //true
    console.log(/[^abc]/.test('abc123')) //true
    console.log(/[^abc]/.test('123456')) //true
    console.log(/[^abc]/.test('abcabc')) //false

4.范围类

需求: 检测字符串中有没有数字字符

        /[0123456789]/ : 有没有数字

        需求: 检测字符串中有没有字母

        /[abcdefghijklmnopqrstuvwxyz]/ :  检测字符串中有没有字母

1.范围类

            /[0-9]/ : 检测有没有数字

            /[a-z]/ : 检测有没有小写字母

            /[A-Z]/ : 检测有没有大写字母

2.范围类特点

            2.1 范围类是一个闭区间 :  /[5-8]/ : 包含5,也包含8

            2.2 范围类可以连写:  /[0-9a-zA-Z]/ : 大小写字母+数字

            2.3 范围类一定是 右边 > 左边 (依据ASCII码)

                [5-8] : 正确

                [8-5] : 报错

5.与定义类

预定义类: 正则表达式提供好的用来匹配常见的字符类

         预定义类           等价类                                     含义

             .                 [^\r\n]                                     除了回车和换行之外的所有字符

           \d                 [0-9]                                       数字字符

           \D                 [^0-9]                                    非数字字符

           \s                 [\f\n\r\t\v]                                空白字符

           \S                 [^\f\n\r\t\v]                             非空白字符

           \w                 [a-zA-Z_0-9]                         单词字符(字母、下划线、数字)

           \W                 [^a-zA-Z_0-9]                       非单词字符

6.边界

原义文本字符: /abc/    检测字符串abc

        字符类     :   /[abc]/  检测a或b或c任意字符

        反向类     :   /[^abc]/  检测不是 a或b或c任意字符

        边界       :   /^abc/    在正则中,有时候一个元字符可能有两种含义(类似于js的+)

边界

        1.开头边界: /^abc/  

          正确含义: 检测 以a开头 +  bc的字符串   (^只对a检测)

          错误含义: 检测 以abc开头的字符串    (^把abc当做整体)

console.log(/^abc/.test('a1b2c3'))//false
        console.log(/^abc/.test('123abc'))//false
        console.log(/^abc/.test('abc123'))//true
        console.log(/^abc/.test('abc123abc'))//true
        console.log(/^abc/.test('abcabc'))//true

7.量词

为什么要有量词

        需求:检测一个字符串有没有11个数字

            /\d\d\d\d\d\d\d\d\d\d\d/ : 检测11个数字

量词作用: 检测字符出现的次数

            ?                       出现零次或一次(最多出现一次 <=1)

            +                       出现一次或多次(至少出现一次 >=1)

            *                       出现零次或多次(任意次)

            {n}                     出现n次

            {n,m}                 出现n-m次

            {n,}                    出现至少n次(>=n)

console.log('a123456789'.replace(/\d{5}/,'X')) //ax6789
      console.log('a123456789'.replace(/\d{5,8}/,'X')) //ax9
      console.log('a123456789'.replace(/\d{5,}/,'X')) //ax

8.分组

/* 元字符

      []  \ .  ^ $  ? + * {} | ()

*/

/* () 在正则中有两种含义

        1.分组 : 把多个字符归为一组,用于量词

        2.提升优先级 : 让 | 只匹配小括号内部的字符,提升|的优先级

*/

9.修饰符

1.修饰符 : 对正则表达式起到修饰的作用

          g : global,全局匹配

          i : intensity, 不区分大小写

2.修饰符语法:  /正则表达式/修饰符

          * new RegExp('正则','修饰符')

// 1. g : global,全局匹配
      // /a/:只能匹配第一个a
      console.log('a123A456aaAA'.replace(/a/,"X"))//X123A456aaAA
      // /a/g:匹配所有的a
      console.log('a123A456aaAA'.replace(/a/g,"X"))//X123A456XXAA
      
      // 2.i : intensity, 不区分大小写
      // /A/:只能匹配第一个大写的A
      console.log('a123A456aaAA'.replace(/A/,"X"))//a123X456aaAA
      // /A/i:匹配a或A
      console.log('a123A456aaAA'.replace(/A/i,"X"))//X123A456aaAA

      // 3.修饰符可以同时存在
      // /a/ig:匹配所有的a或A
      console.log('a123A456aaAA'.replace(/a/ig,"X"))//X123X456XXXX

总结:

/* 
        1.手机号正则
            /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/
        */    

        /* 2.验证码
            /^\d{6}$/
         */

        /* 3.账号密码 6-20位: 大小写字母, 下划线_ 
            /^\w{6,20}$/
        */

        /* 4.邮箱
            /^\w+[@]\w+\.\w+(\.\w+)?$/
        */

编程思想:

1.编程思想:解决同类问题的 固定思路

            求和思想:求累加和

            擂台思想:求最大值/最小值

            排他思想:多个元素只能选中一个

            开关思想:

                全选框:每一个选择框都要选中

                非空判断:每一个输入框都要输入文本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值