正则、强弱密码校验、手机号、身份证号、QQ邮箱、URL解析、千页符


一、正则

1、特殊元字符

\d 代表数字 0-9
\ 字符串中的转义 就是把字符串中有特殊含义的字符 转成字符本身(不代表任何含义)只会转义一位
\D 代表除了数字以外的其他字符
\w 代表数字或者字母或下划线
\W 代表数字字母下划线以外的其他字符
^ 代表以什么开头 若写就得写在正则的最前面
$ 代表以什么结尾 若写就得写在正则的最后边
[A-Z] 代表的是大写字母
[a-z] 代表的是小写字母
[a-zA-Z] 代表所有字母
a|b 代表a或b
?= 代表正向预查
. 代表除了换行以外的其他字符 若在[]里面就代表点本身了;
() 提升优先级 分组(捕获时用到的概念)

2、量词元字符

? 代表前面的字符出现0或者1次
+ 代表前面的字符出现1到多次
* 代表前面的字符出现0到多次
{n} 代表前面的字符出现n次
{n,} 代表前面的字符出现n次到多次
{n,m} 代表前面的字符出现n到m次

3、修饰符

g (global) 全局匹配 最多用于捕获 匹配时很少用
i (ignoreCase) 忽略大小写
m (multiline) 多行匹配

二、正则的应用

1、手机号

<!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 type="text" placeholder="输入手机号" id="inp" />
    <button id="btn">登录</button>
  </body>
</html>
<script>
  let reg = /^1[3-9]\d{9}$/;
  btn.onclick = function () {
    let val = inp.value; // 用户输入的内容
    let bol = reg.test(val);
    if (bol) {
      alert("登录成功")
    } else {
      alert("手机号不合法");
    }
  };
</script>

2、QQ邮箱

<!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 type="text" placeholder="输入QQ邮箱" id="inp" />
    <button id="btn">登录</button>
  </body>
</html>
<script>
  let reg = /^\d{5,11}\@qq\.com$/;
  btn.onclick = function () {
    let val = inp.value; // 用户输入的内容
    let bol = reg.test(val);
    if (bol) {
      alert("登录成功");
    } else {
      alert("邮箱不合法");
    }
  };
</script>

3、身份证号

<script>
    
  // 身份证的匹配
  // 130425199110151013 前17位是数字 最后一位数子或者X
  let reg = /^\d{17}(\d|X)$/
  let reg2 = /^\d{17}[\dX]$/

</script>

4、18-65的工作年龄段

//  18-65 的工作年龄段 /[18-65]/
  // 18-19 20-59  60-65 /[20-59]/ 2或者0到5或者9; 一位数字
  // '34'
  let reg = /^(1[89]|[2-5]\d|6[0-5])$/
  reg.test('25') //true
  reg.test('14') //false

5、弱密码校验

// 密码只能是有 数字 字母 _ . - + @ $ 组成的8到15位字符  弱校验
  let reg = /^[\w\.\-+@$]{8,15}$/

6、强密码校验

// 密码必须包含大字母 小写字母 数字 (_.-+@$)  8到15位
   let reg = /^(?=.*[A-Z]).{8,15}$/

三、捕获

  • 捕获的贪婪性 一次获取 会尽可能多的去获取内容 想解决这个贪 就在量词后边 加一个?
  • 捕获的懒惰行 只获取一次;解决这个懒 使用修饰符 g
<script src>
  var str = '你好2009你好2022';
  var reg = /\d+/ // reg.lastIndex代表的就是当次匹配或者捕获 对应字符串的开始索引
  // reg.test(str)  execAll
  console.log(reg.test(str))
  console.log(reg.test(str))
  console.log(reg.exec(str))
  // console.log(reg.exec(str))
  RegExp.prototype.execAll = function (str) {
    // this --> reg
    if (!this.global) {
      throw new Error("没加g")
    }
    this.lastIndex = 0; // 防止这个正则的lastIndex不是0而导致获取到的内容不对
    let ary = []
    // 想ary中填充内容
    let qq = this.exec(str)
    while (qq) {
      ary.push(qq[0])
      qq = this.exec(str)
    }

    return ary

  }
  console.log(reg.execAll(str)) // ==> ['2009','2022']

1、URL解析

let str = 'https://www.baidu.com/s?qq=111&www=222&ee=333'
function queryURL(str, key) {
  let reg = /([a-z]+)=(\d+)/g
  let ary = str.match(reg) // 
  console.log(ary)
  let obj = {}
  ary.forEach(item => {
    let res = item.split('=')//['qq','111']
    let k = res[0], v = res[1];
    obj[k] = v
  })
  // 若用户传递了key则返回key对应的值,若没传  就返回这个对象
  return key ? obj[key] : obj
}

queryURL(str) // {qq:111,www:222,ee:33}
queryURL(str, 'qq') // 111

2、千页符


//第一种
let str = '12345666.048586' // 5,123,234
function qian(str) {
  let xiaoshu = str.split('.')[1]
  str = str.split('.')[0]
  let str2 = str.split('').reverse().join('')
  let res = ''
  for (let i = 0; i < str2.length; i++) {
    if (i % 3 == 2) {
      res += str2[i] + ','
    } else {
      res += str2[i]
    }
  }
  return res.split('').reverse().join('').replace(/^,/, '') + (xiaoshu ? '.' + xiaoshu : '')
}

//第二种
function qian2(str) {
  let reg = /\d(?=(\d{3})+$)/g
  let xiaoshu = str.split('.')[1]
  str = str.split('.')[0]
  return str.replace(reg, function (a) {
    return a + ','
  }) + (xiaoshu ? '.' + xiaoshu : '')
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值