JavaScript之不可亵玩系列-03 用正则做密码校验

【原创】码路工人 Coder-Power

大家好,这里是码路工人有力量,我是码路工人,你们是力量。

github-pages
博客园cnblogs


JavaScript之不可亵玩系列-03 用正则做密码校验

今日玩法:

  物料:input 密码若干,JavaScript 语句与正则表达式

  把玩:RegExp.test,检测目标:
     密码长度6-12位,由数字、小写字母、大写字母组成,必须至少包括2种


  • 玩法解析:

    • 正则基础

      先列出下文用到的知识点,看看以下你是否都掌握了呢。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      ()      // 用于分组
      ^ // 表示以某字符开始,写在开头
      $ // 表示以某字符结尾,写在结尾
      [] // 方括号表示匹配范围
      [^] // 方括号里面的 ^ 表示取反,即匹配指定字符以外的
      \d // 等同于 [0-9],即数字
      ?! // 表示匹配后面的内容取反,即不是后面的内容
      + // 表示出现一次或多次
      {} // 指定出现的次数,可以指定最小次数与最大次数,另有省略形式:
      {1,} // 至少一次,等同于 +,最多不限
      {2, 3} // 至少2次,至多3次
      {4} // 只匹配出现4次

      自知土得掉渣,怕误导大家,还是贴上正规W3shool的标准表述:
      JavaScript RegExp

    • 至少包含两种:

      • 可以包含两种
      • 可以包含三种
      • 不可以只包含一种
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
          // 第一组
      (?!^\d+$) // 不管有几位,只要全是数字,就不对

      // 第二组
      (?!^[a-z]+$) // 不管有几位,只要全是小写字母,就不对

      // 第三组
      (?!^[A-Z]+$) // 不管有几位,只要全是大写字母,就不对

      // 没有匹配到,0位也不对
      ```
      - 由三种字符组成:数字,小写字母,大写字母
      - 密码长度6-12位
      ```js
      (^[0-9a-zA-Z]{6,12}$) // 匹配字符 + 匹配重复次数
    • 完整撸一把:

      结果也都列出来了,注释写的明白儿的。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      var pwdReg = /(?!^[0-9]+$)(?!^[a-z]+$)(?!^[A-Z]+$)(^[0-9a-zA-Z]{6,12}$)/

      // 只有数字:false
      console.log(pwdReg.test("123456"))

      // 只有小写:false
      console.log(pwdReg.test("aabbcc"))

      // 只有大写:false
      console.log(pwdReg.test("AABBCC"))

      // 类型符合,但位数不足6:false
      console.log(pwdReg.test("123ab"))

      // 类型符合,但位数超过12:false
      console.log(pwdReg.test("1234567890Ab3"))

      // 小写 + 大写:true
      console.log(pwdReg.test("aBcdef"))

      // 大写 + 数字:true
      console.log(pwdReg.test("A12345"))

      // 小写 + 数字:true
      console.log(pwdReg.test("a12345"))

      // 大写 + 小写 + 数字:true
      console.log(pwdReg.test("Aa1234"))

      很多童鞋反应正则好难学啊,正则不要学,要写。俗话说,

      “这位同学本不懂正则,写的多了也便懂得了。”

      每次写每次查语法的码路工人也计划通过多写写来掌握一下这个神器,
      边写边学,一路有你,走起~

以上,收工。

–END–


公众号(码路工人有力量)

欢迎关注分享,一起学习提高吧。
QRCode/微信订阅号二维码
CoderPowerQRCode