Web APIs day6 | 正则&阶段案例

目录

1 正则表达式

1.1 什么是正则表达式

1.2 语法

1.3 元字符

1.3.1 定义

1.3.2 参考文档

1.3.3 边界符

1.3.4 量词

1.3.5 字符类

1.4 修饰符

1.4.1 替换 replace

1.4.2 g&i

2 综合案例

案例1 用户名验证案例

案例2  昵称案例


1 正则表达式

1.1 什么是正则表达式

正则表达式(Regular Expression)是用于匹配字符串中字符组合的模式。在 JavaScript中,正则表达式也是对象

通常用来查找、替换那些符合正则表达式的文本,许多语言都支持正则表达式。

◇ 正则表达式在 JavaScript中的使用场景

  • 例如验证表单:用户名表单只能输入英文字母、数字或者下划线, 昵称输入框中可以输入中文(匹配)
    • 比如用户名: /^[a-z0-9_-]{3,16}$/
  • 过滤掉页面内容中的一些敏感词(替换),或从字符串中获取我们想要的特定部分(提取)等 。

1.2 语法

1. 定义正则表达式语法:

①简单定义法:

 如: 

②构造定义法:

2.判断是否有符合规则的字符串:

        test() 方法 用来查看正则表达式与指定的字符串是否匹配

 如:        (返回布尔值)

  • 如果正则表达式与指定的字符串匹配 ,返回true,否则false
  • 该法只能检测一个目标字符
  • 注意:js区分大小写

3.检索(查找)符合规则的字符串:

        exec() 方法 在一个指定字符串中执行一个搜索匹配

 如:        (如果匹配成功,exec() 方法返回一个数组,否则返回null)

 

1.3 元字符

1.3.1 定义

①普通字符: 大多数的字符仅能够描述它们本身,这些字符称作普通字符,例如所有的字母和数字。 也就是说普通字符只能够匹配字符串中与它们相同的字符。

        元字符(特殊字符): 是一些具有特殊含义的字符,可以极大提高了灵活性和强大的匹配功能。

  • 比如,规定用户只能输入英文26个英文字母,普通字符的话 abcdefghijklm…..
  • 但是换成元字符写法:[a-z]

②为了方便记忆和学习,我们对众多的元字符进行了分类:

  • 边界符(表示位置,开头和结尾,必须用什么开头,用什么结尾)
  • 量词 (表示重复次数)
  • 字符类 (比如 \d 表示 0~9)

1.3.2 参考文档

1.3.3 边界符

 正则表达式中的边界符(位置符)用来提示字符所处的位置,主要有两个字符

 注意:如果 ^ 和 $ 在一起,表示必须是精确匹配。(只能出现写出的模式)

        // 读法:以a开头,以c结尾,中间只能是b(即该字符串只能是abc,精确匹配abc)
        const reg = /^abc$/
        console.log(reg.test('ABC'))    //false
        console.log(reg.test('abc'))    //true
        console.log(reg.test('abfc'))    //false
        console.log(reg.test('abcdefadc'))    //false

        const reg = /^a$/
        console.log(reg.test('A'))    //false
        console.log(reg.test('aaa'))    //true
        console.log(reg.test('abc'))    //false

1.3.4 量词

量词用来 设定某个模式出现的次数

位置: 写在所要设定的模式后

 注意: 逗号左右两侧千万不要出现空格

        // * 几次都行
        const reg=/^a*$/
        
        console.log(reg.test(''))  //t  
        console.log(reg.test('a'))  //t
        console.log(reg.test('aaa'))  //t
        console.log(reg.test('aba'))  //f
        // + 一次以上
        const reg = /^a+$/

        console.log(reg.test(''))  //f  
        console.log(reg.test('a'))  //t
        console.log(reg.test('aaa'))  //t
        // ? 最多一次
        const reg = /^a+$/

        console.log(reg.test(''))  //t  
        console.log(reg.test('a'))  //t
        console.log(reg.test('aaa'))  //f
        // {n} 只能n次

        const reg = /^a{2}$/
        console.log(reg.test(''))  //f  
        console.log(reg.test('a'))  //f
        console.log(reg.test('aa'))  //t
        console.log(reg.test('aaa'))  //f
        // {n,} n次以上

        const reg = /^a{2,}$/
        console.log(reg.test(''))  //f  
        console.log(reg.test('a'))  //f
        console.log(reg.test('aa'))  //t
        console.log(reg.test('aaa'))  //t
        // {n,m} n次以上

        const reg = /^a{2,3}$/
        console.log(reg.test(''))  //f  
        console.log(reg.test('a'))  //f
        console.log(reg.test('aa'))  //t
        console.log(reg.test('aaa'))  //t
        console.log(reg.test('aaaa'))  //f

练习

        const reg = /^a?b*c+d{3}$/

        console.log(reg.test('abcd'))       //f
        console.log(reg.test('aabcddd'))    //f
        console.log(reg.test('abcddd'))     //t
        console.log(reg.test('cddd'))       //t
        console.log(reg.test('cccddd'))     //t
        console.log(reg.test('cccfddd'))     //f

1.3.5 字符类

一、[ ]

1、 [ ] 匹配字符集合

 后面的字符串只要包含 abc 中任意一个字符,都返回 true 。

        const reg = /[abc]/
        console.log(reg.test('andy'))   //t
        console.log(reg.test('baby'))   //t
        console.log(reg.test('cry'))   //t
        console.log(reg.test('die'))   //f
        const reg = /^[abc]$/
        console.log(reg.test('andy'))   //f
        console.log(reg.test('baby'))   //f
        console.log(reg.test('cry'))   //f
        console.log(reg.test('die'))   //f

        console.log(reg.test('anda'))   //f
        console.log(reg.test('babb'))   //f 
        console.log(reg.test('crc'))   //f
        console.log(reg.test('did'))   //f

        console.log(reg.test('a'))   //t
        console.log(reg.test('b'))   //t
        console.log(reg.test('c'))   //t

2、[ ] 里面加上 - 连字符

使用连字符 - 表示一个范围

比如:

  • [a-z] 表示 a 到 z 26个英文字母都可以
  • [a-zA-Z] 表示大小写都可以
  • [0-9] 表示 0~9 的数字都可以

注意:

        [ ]内写多个范围连写即可,不要用空格隔开,如:

        const reg=/^[0-9a-zA-Z_-]$/

3、 [ ] 里面加上 ^ 取反符号

        比如:  [^a-z] 匹配除了小写字母以外的字符

        注意:要写到中括号里面

二 . 匹配除换行符(\n或\r)之外的任何单个字符

        const reg = /./
        console.log(reg.test('c'))   //t
        console.log(reg.test('\n'))   //f

补充:转义符

        //  \为转义符 \n\r 回车   \t tab 在控制台使用
        console.log('好好学习,\n day day \t up')
        console.log(`\``)   //反引号中不能包含反引号,要包含的话得试用转义符

  •  注意:如将特殊字符如 \ . | (或) 写入[ ],会被转义为普通字符
            const reg = /[.]/
            console.log(reg.test('c'))   //f
            console.log(reg.test('.'))   //t

如需要匹配任意单字符,则

        const reg = /.|\n/
        console.log(reg.test('c'))   //t
        console.log(reg.test('\n'))   //t

三、预定义:指的是 某些常见模式的简写方式。

 如:

1.4 修饰符

1.4.1 替换 replace

1.4.2 g&i

 修饰符约束正则执行的某些细节行为,如是否区分大小写、是否支持多行匹配等

语法:

 i 是单词 ignore 的缩写,正则匹配时字母不区分大小写

 g 是单词 global 的缩写,匹配所有满足正则表达式的结果

        console.log('abcdabcd1234ABCD'.replace(/abcd/, '-'))   // -abcd1234ABCD
        console.log('abcdabcd1234ABCD'.replace(/abcd/g, '-'))   // --1234ABCD
        console.log('abcdabcd1234ABCD'.replace(/abcd/i, '-'))   // -abcd1234ABCD
        console.log('abcdabcd1234ABCD'.replace(/abcd/ig, '-'))  // --1234-

2 综合案例

案例1 用户名验证案例

需求:用户名要求用户英文字母,数字,下划线或者短横线组成,并且用户名长度为 6~16位

分析:

①:首先准备好这种正则表达式模式 /^[a-zA-Z0-9-_]{6,16}$/

②:当表单失去焦点就开始验证.

③:如果符合正则规范, 则让后面的span标签添加 right 类.

④:如果不符合正则规范, 则让后面的span标签添加 wrong 类.

        .right {
            color: green;

        }

        .wrong {
            color: red
        }
        // 获取元素:
        const inp = document.querySelector('input')

        // 2 失去焦点即判断
        inp.addEventListener('blur', function () {
            const reg = /^[a-zA-Z0-9_-]{6,16}$/
            if (reg.test(inp.value)) {
                inp.nextElementSibling.innerHTML = '输入正确'
                inp.nextElementSibling.className='right'

            } else {
                inp.nextElementSibling.innerHTML = '输入错误'
                // className为类名覆盖
                inp.nextElementSibling.className='wrong'
            }

        })

案例2  昵称案例

需求:要求用户只能输入中文

分析:

①:首先准备好这种正则表达式模式 /^[\u4e00-\u9fa5]{2,8}$/

②:当表单失去焦点就开始验证.

        // 获取元素:
        const inp = document.querySelector('input')

        // 2 失去焦点即判断
        // blur可以用,但每focus一次都会触发,没必要; 用change比较好,有所改变才会触发
        inp.addEventListener('change', function () {

            const reg = /^[\u4e00-\u9fa5]{2,8}$/
            if (reg.test(inp.value)) {
                inp.nextElementSibling.innerHTML = `
                <img src="./images/right.png" alt="">
                `

            } else {
                inp.nextElementSibling.innerHTML = `
                <img src="./images/error.png" alt="">
                `
            }
        })

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值