正则表达式

125 阅读2分钟

正则表达式

介绍

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

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

作用

表单验证(匹配

过滤敏感词(替换

字符串中提取我们想要的部分(提取

语法

1.定义规则
let str = 'abcde'
// let 变量名 = / 表达式 /
//  /  / 是正则表达式字面量
// 下面这个正则表达式用于 验证 字符串是是否包含  c
let reg = /c/

注:默认情况下,正则只关注是否包含,不是严格意义的完整匹配

2.查找/校验
test方法
// let 校验结果 = 正则表达式对象.test(你想进行校验的源字符串)
let res = reg.test(str)

调用test方法进行正则的匹配校验,返回校验结果,结果为bool值,如果校验成功则返回true,否则返回false

元字符

边界符

^:开始

$:结束

组合在一起,可以限制匹配的内容的位数

使用场景:后期有严格的位数匹配的需要,就需要添加边界符,如手机号,身份证号,区号,邮编等

字符类(占位符)
let str = prompt('请输入字符')
// 1.   . : 代表一个任意的字符
let reg = /^.$/
// 2. \d : 代表一个数字:0-9
let reg = /^\d$/
// 3. \D: 代表一个非数字
let reg = /^\D$/
// 4. \w: 代表一个合法字符: 0-9 A-Z a-z _
let reg = /^\w$/
// 5. \W: 代表一个非法字符
let reg = /^\W$/
// 6. \s: 代表一个空字符:空格 制表位 换行
let reg = /^\s$/
// 7. \S: 代表一个非空字符
let reg = /^\S$/
// 8. []:代表一个指定的范围中的某个字符,范围可以是具体的值范围,也可以是一个连续的范围
// 在描述连续范围的时候,-是一个连接符
// []里面的字符都当成普通字符来看待,相当于转义了
// let reg = /^[0.]$/
let reg = /^[0-9A-Za-z_]$/
let result = reg.test(str)
console.log(result);
量符(修饰符)
let str = prompt('请输入字符')
// 1. *:修饰前面的字符出现任意次
let reg = /^\d*$/
// 2. ?:修饰前面的字符出现0次或1次
let reg = /^\d?$/
// 3. +:修饰前面的字符出现1次或多次
let reg = /^\d+$/
// 4. {n}:修饰前面的字符出现n次
let reg = /^\d{11}$/
// 5. {n,m}:修饰前面的字符最少出现n次,最多出现m次
let reg = /^\d{2,4}$/
// 6. {n,}:修饰前面的字符最少出现n次,最多没有限制
let reg = /^\w{3,}$/
let result = reg.test(str)
console.log(result);

注:修饰符不能单独存在,必须修改前面的占位符

综合案例

<!DOCTYPE html>
<html lang="en"><head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head><body>
    用户名:<input class="username" type="text" placeholder="请输入至少三位合法字符" />
    <span></span>
    <br />
    密码:
    <input class="password" type="text" placeholder="请输入3-16位密码" /> <span></span><br />
​
    手机号:
    <input class="phone" type="text" placeholder="请输入合法的手机号" /><span></span> <br />
    邮箱:
    <input class="email" type="text" placeholder="请输入一个合法的邮箱地址" /><span></span>
    <br />
    <button>提交</button>
​
    <script>
        let btn = document.querySelector('button')
        let username = document.querySelector('.username')
        let password = document.querySelector('.password')
        let phone = document.querySelector('.phone')
        let email = document.querySelector('.email')
​
        btn.addEventListener('click', function () {
            // 用户名:三位合法字符
            let regname = /^\w{3,}$/
            // 正则表达式对象.test(获取得到的值)
            if (!regname.test(username.value)) {
                // span = 用户名的下一个兄弟元素
                let span = username.nextElementSibling
                // 给span输入内容
                span.innerHTML = '用户名输入不合法'
                // 为文本框聚焦
                username.focus()
                // 跳出
                return
            } else {
                // span = 用户名的下一个兄弟元素
                let span = username.nextElementSibling
                // span 什么都不显示
                span.innerHTML = ''
            }
​
            // 密码:任意字符3-16位
            let regword = /^.{3,16}$/
            // 正则表达式对象.test(获取得到的值)
            if (!regword.test(password.value)) {
                // span = 密码框的下一个兄弟元素
                let span = password.nextElementSibling
                // 给span输入内容
                span.innerHTML = '请输入3-16位密码'
                // 为文本框聚焦
                password.focus()
                // 跳出
                return
            } else {
                // span = 用户名的下一个兄弟元素
                let span = password.nextElementSibling
                // span 什么都不显示
                span.innerHTML = ''
            }
​
            // 手机号:第一位是1 第二位是35789中任意一位 还有其它任意九位数字
            let regphone = /^1[35789]\d{9}$/
            if (!regphone.test(phone.value)) {
                // span = 用户名的下一个兄弟元素
                let span = phone.nextElementSibling
                // 给span输入内容
                span.innerHTML = '手机号输入不合法'
                // 为文本框聚焦
                phone.focus()
                // 跳出
                return
            } else {
                // span = 用户名的下一个兄弟元素
                let span = phone.nextElementSibling
                // span 什么都不显示
                span.innerHTML = ''
            }
​
            // 邮箱:合法字符至少一位 @符号 合法字符至少两位 .符号 合法字符至少两位 最多四位
            let regemail = /^\w+[@]\w{2,}[.]\w{2,4}$/
            if (!regemail.test(email.value)) {
                // span = 用户名的下一个兄弟元素
                let span = email.nextElementSibling
                // 给span输入内容
                span.innerHTML = '邮箱输入不合法'
                // 为文本框聚焦
                email.focus()
                // 跳出
                return
            } else {
                // span = 用户名的下一个兄弟元素
                let span = email.nextElementSibling
                // span 什么都不显示
                span.innerHTML = ''
            }
        })
    </script>
</body></html>