正则表达式

正则表达式(引用数据类型)

1. 创建正则表达式
// 字面量
let reg1 = /\d{5,}@qq.com/
// 内置构造函数
let reg1 = new RegExp(“\d{5,}@qq\.com”)
格式:new RexExp(“\正则表达式\”,“gi”)\g:全局;i:忽略大小写

2.应用场景
QQ邮箱、身份证号、密码等等有需要设置“字串格式”的场景

3.正则表达式里面的符号
元字符
. : 匹配非换行(\n)的任意字符
\ : 转译符号,把有意义的 符号 转换成没有意义的 字符,把没有意义的 字符 转换成有意义的 符号
\n
换行符
\t
制表符
4~8个空白 会自动找上一行的制表符去对齐
\r
回车符
回到行首\n\r
\

\u
Unicode字符集的码点
\u0f12
\s : 匹配空白字符(空格/制表符/回车/换行)
\S : 匹配非空白字符
\d : 匹配数字
digit数字
\D : 匹配非数字
\w : 匹配单词字符
字母、数字、下划线
\W : 匹配非数字字母下划线
中文:[\u4e00-\u9fa5]
19968
40869
限定符
a* : 前一个内容重复至少 0 次,也就是可以出现 0 ~ 正无穷 次
a+ : 前一个内容重复至少 1 次,也就是可以出现 1 ~ 正无穷 次
a? : 前一个内容重复 0 或者 1 次,也就是可以出现 0 ~ 1 次
a{n} : 前一个内容重复 n 次,也就是必须出现 n 次
a{n,} : 前一个内容至少出现 n 次,也就是出现 n ~ 正无穷 次
a{n,m} : 前一个内容至少出现 n 次至多出现 m 次,也就是出现 n ~ m 次
边界符
^ : 表示开头
$ : 表示结尾
特殊符号
() : 限定一组元素
[abc] : 字符集合,表示写在 [] 里面的任意一个都行
[^abc] : 反字符集合,表示写在 [^] 里面之外的任意一个都行
a-z : 范围,比如 a-z 表示从字母 a 到字母 z 都可以
| : 或,正则里面的或 (aaa|bbb) 表示字母 a 或者 b 都可以
标示符
g : 表示全局匹配
这个 g 是写在正则的最后面的
/\w/g
就是全局匹配字母数字下划线
global 全局的
i : 表示忽略大小写
这个 i 是写在正则的最后面的
/a-z/i
就是在正则匹配的时候不去区分大小写
ignore 忽略
m:多行模式
y:粘性模式
配置
var reg = /\d+/gim
new RegExp(“\d+”,“gim”)
贪婪与非贪婪
var reg1 = /(.)\d+/
贪婪模式(默认模式)
把字串拿完
var reg2 = /(.
?)\d+/
非贪婪模式
只拿一个类型的子串,留另外类型的子串给别人
特殊选择
exp1(?=exp2):查找 exp2 前面的 exp1
(?<=exp2)exp1:查找 exp2 后面的 exp1。
exp1(?!exp2):查找后面不是 exp2 的 exp1。
(?<!exp2)exp1:查找前面不是 exp2 的 exp1。

4.正则表达式的方法
①reg.test(str)
test 是用来检测字符串是否符合我们正则的标准
语法: 正则.test(字符串)
返回值: boolean
o
②reg.exec(str)//匹配符合要求的子串(只能找出一个)+检索位置
exec 是把字符串中符合条件的内容捕获出来(匹配检索)
语法: 正则.exec(字符串)
返回值: 把字符串中符合正则要求的第一个子串(以及一些其他信息),以数组的形式返回
分组内容
/(大区码)-(地区码)-(年份)-(月份)-(日期)-(尾号)/
执行匹配得到的数组
[“4-23456-2020-07-01-4321”,“4”,“23456”,“2020”,“07”,“01”,“4321”,index:666,input:“字符串内容”]
o
5.字符串的方法
①match
match 找到字符串中符合正则条件的内容返回
语法: 字符串.match(正则)
返回值 :
没有标示符 g 的时候,是和 exec 方法一样
有标示符 g 的时候,是返回一个数组,里面是匹配到的每一项
6.正则表单验证——邮箱注册
/*
·模拟用户注册,当用户点击提交表达时进行合法性验证
·验证邮箱是否合法,不合法则显示提示信息
·验证密码是否合法,不合法则显示提示信息,6-12位字母数字特殊符号的组合(!@#$%^&*)
// ---------------------------------------------------------
*选做:密码强度:弱=只包含一种字符 强=同时包含三种字符且长度超过12位 中=其它情形
*输入的同时实时显式密码强度
*/

let str = "abcdabcd123abcd456abcd789abcd";
        let reg = /\d{3}/g;
        console.log(
          str.match(reg) //['123', '456', '789']
        );
②search
    search 是查找字符串中是否有满足正则条件的内容
    语法: 字符串.search(正则)
    返回值 : 有的话返回开始索引,没有返回 -1
let str = "abcdabcd123abcd456abcd789abcd";
        let reg = /\d{6}/;
        console.log(str.search(reg));
        //-1
③replace
    replace 是将字符串中满足正则条件的字符串替换掉
    语法: 字符串.replace(正则,要替换的字符串)
    返回值 : 替换后的字符串
  例子:
let str = "asdasdasdfuckasdasdasdhhasdshitadasdHhasdad你妹啊";
       let regDirty = /(fuck|shit|damn|你妹)/g;
       console.log(str.replace(regDirty, (sub) => sub.replace(/./g, "*")));//asdasdasd****asdasdasdhhasd****adasdHhasdad**啊
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>11_正则表单验证</title>
    <style>
      * {
        margin: 0;
        padding: 0;
      }

      span {
        color: red;
        display: none;
      }
    </style>
  </head>

  <body>
    <h1>注册页面</h1>

    邮箱:<input id="ipEmail" type="text" /><span id="spInfo1"
      >请输入正确的邮箱地址</span
    ><br />
    密码: <input id="ipPwd" type="text" /><span id="spInfo2"
      >密码长度为6~20个单词字符</span
    ><br />
    <button id="btn">注册</button>

    <!-- valid合法的 invalid非法的 -->
    <script>
      const reg =
        /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
      //   至少八个字符,至少一个字母,一个数字和一个特殊字符
      const reg2 =
        /^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{8,}$/;
      // 至少八个字符,至少一个字母和一个数字:
      const reg3 = /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8, }$/;
      // 拿到按钮样式属性
      var btn = document.querySelector("#btn");
      btn.addEventListener("click", function (e) {
        // 接受输入的内容
        const Email = ipEmail.value.trim();
        const Pwd = ipPwd.value.trim();
        // 如果pwd满足则进入判断密码属不属于合法但弱
        if (!reg2.test(Pwd)) {
          reg3.test(Pwd) || (Pwd.length >= 6 && Pwd.length <= 12)
            ? alert("合法但弱")
            : alert("6-12位字母数字特殊符号的组合");
        }
        // 如果pwd不属于弱以及合法则进入此判断
        else {
          reg.test(Email)
            ? alert("合法强")
            : alert("6-12位字母数字特殊符号的组合");
        }
      });
    </script>
  </body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值