正则表达式

正则表达式

一、正则表达式

1.定义

    检查、匹配字符串的表达式。是描述规则,主流语言都有良好的支持。

2.使用场景

    字符串校验,查询与替换

3.正则表达式测试地址

    https://tool.oschina.net/regex/

二、字符的范围匹配

正则表达式说明正确错误
A精准匹配单个字符Aa
x|y允许出现的2个字符Yn
[xyz]字符集合,允许出现集合内任意单个字符zc
[a-z]、[A-Z]、[0-9]字符范围z、W、3Z、w、w
[^xyz]、[^0-9]集合内字符不允许出现w、wx、0

三、元字符

1.定义

    单指某一类字符的字符是元字符。

正则表达式说明正确错误
\d匹配任意单个数字8i
\D匹配\d规则之外的任意单个字符i8
\w匹配任意单个字母数字下划线Y&
\W匹配\w之外的任意单个字符&Y
\s匹配单个空格x
\n匹配单个换行符x
.匹配任意单个字符(换行符除外)
\.特殊字符,只匹配..1

2.习题

1.匹配3213.383219

​     \d\d\d\d.\d\d\d\d\d\d

2.匹配杭州与宁波的座机号码(0571|0574-xxxxxxxx)

​     Eg.0571-12345678

​     057[1|4]-\d\d\d\d\d\d\d\d

3.请匹配18位身份证号(17位数字+数字或大小写x)

​     Eg.350122198810051539

​     科普:第一位:代表的是所在地区(1-6以及8)

​                第2-16位:代表的是任意的数字

​               最后一位:数字或大小写x

    ​ [1234568]\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d[0-9xX]

四、多次重复匹配

正则表达式说明正确错误
A{N}精准匹配N次(Eg.A{3})AAAAA
A{N,}最少出现N次(Eg.A{3,})AAAAA
\d{N,M}约定出现的最少次数和最大次数(Eg.\d{3,5})123412
\d*可以出现0次至无限次,相当于{0,}1234
\d+最少出现一次,相当于{1,}12
\d?最多出现一次,相当于{0,1}112

1.匹配3213.383219

    ​​ \d{4}.\d{6}

2.匹配杭州与宁波的座机号码(0571|0574-xxxxxxxx)

    ​​ Eg.0571-12345678

​    ​ 057[1|4]-\d{8}

3.请匹配18位身份证号(17位数字+数字或大小写x)

​     ​Eg.350122198810051539

​     ​[1234568]\d{16}[0-9xX]

4.验证短信验证码(6位数字)

​    ​ Eg.d123456

​    ​ \d{6} == \d\d\d\d\d\d\d

5.匹配全国座机号(区号3位或4位-电话号码7位或8位)

​     ​Eg.0591-12345678

​     ​\d{3,4}-\d{7,8}

6.请匹配英文姓名(Eg.James Waston)

​    ​ [A-Z][a-z]{1,}\s[A-Z][a-z]{0,}

五、定位匹配

1.定义

​ 确定开头与结尾的字符

正则表达式说明正确错误
^A.*头匹配ABCCBA
.*A$尾匹配CBAABC
^A.*A^全字匹配ACCCAACCCB

六、贪婪模式与非贪婪模式

1.贪婪模式

①定义

    ​在满足条件的情况下尽可能多匹配到字符串。贪婪模式是一种默认的匹配模式。

​     ​Eg.520131499

​     ​正则表达式:\d{6,7}

    ​​ 匹配结果:5201314

2.非贪婪模式

①定义

    ​在满足条件的情况下尽可能少匹配到字符串

​     ​Eg.520131499

​     ​正则表达式: \d{6,7}?

​     ​匹配结果:520131

七、表达式分组

1.定义

​ 分组将"正则"分组分为多个子表达式

​     ​Eg.wanwanwanwanshuaishuaishuaishuai

​     ​正则表达式:(wanwan){2}(shuaishuai){2}

1.匹配验证码(4位或6位)

​     ​Eg.7777

​     ​正则表达式:^\d{4,6}$(×)==》要是5位的话也会匹配成功

​     ​正则表达式:(^\d{4}$)|(^\d{6}$)

2.匹配车牌号(冀A-U888G)

​    ​ 正则表达式:^([冀黑粤晋][A-Z])-([A-Z0-9]{5})$

3.匹配中文或英文姓名

​     ​英文Eg.James Waston

​     ​正则表达式:^[A-Z][a-z]+\s[A-Z][a-z]*$

​     ​中文Eg.张三

​     ​^[\u4e00-\u9fa5]*$

​     ​整合

​    ​ (^[\u4e00-\u9fa5]$)|(^[A-Z][a-z]+\s[A-Z][a-z]$)

八、JavaScript表单校验

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>正则表达式</title>
</head>
<body>
    <form action="#" method="post" id="formInfo">
        <!-- 信息不通过 -->
        <div id="error" style="color: red"></div>
        <!-- 姓名 -->
        <div>姓名:<input id="name" name="name"/></div>
        <!-- 身份证 -->
        <div>身份证:<input id="idno" name="idno"></div>
        <!-- 提交 -->
        <div><input type="submit"/></div>
    </form>
<script>
    document.getElementById("formInfo").onsubmit = function () {
        //名字校验
        const regex1 = /^[\u4e00-\u9fa5]{2,10}$/;
        //身份证校验
        const regex2 = /^[1234568]\d{16}[0-9xX]$/;
        //接收用户真正输入的数据
        let name = document.getElementById("name").value;
        let idno = document.getElementById("idno").value;
        //test():要求传入实际的数据来判断是否符合正则表达式
        if(!regex1.test(name)){
            document.getElementById("err").innerHTML="无效姓名";
            //一定要return false!!表单才不会提交
            return false;
        }else if(!regex2.test(idno)){
            document.getElementById("err").innerHTML="无效身份证号";
            return false;
        }else{
            alert("验证通过,准备提交");
            return true;
        }
    }
</script>
</body>
</html>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

庄弯弯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值