V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MinYa
V2EX  ›  正则表达式

求大佬指点 js 正则,拜谢

  •  
  •   MinYa · 2021-09-14 20:07:21 +08:00 · 838 次点击
    这是一个创建于 1166 天前的主题,其中的信息可能已经有所发展或是发生改变。

    密码校验的正则 /(?!.*[\u4E00-\u9FA5\s])(?!^[a-zA-Z]+$)(?!^[\d]+$)(?!^[^a-zA-Z\d]+$)^.{6,20}$/g

    当前规则是 6-20 位,大写字母,小写字母,数字和标点符号(除空格)满足两种即可。

    如果我想改造这个正则,分别判断满足一种,二种,三种,四种应该怎么改写,正则不会写,拜谢大佬们了

    6 条回复    2021-09-14 22:33:04 +08:00
    AoEiuV020
        1
    AoEiuV020  
       2021-09-14 20:32:41 +08:00 via Android
    不懂帮顶,这怎么看都不该用正则,
    cont
        2
    cont  
       2021-09-14 21:10:01 +08:00
    这个正则思路大概是:排除中文和空格,排除纯字母的字符串,排除纯数字的字符串,排除纯非字母和数字的字符串。

    那符合的情况就是至少满足两种规则的字符串。

    所以改造的方法是增加或减少要排除的条件。
    coolan
        3
    coolan  
       2021-09-14 21:39:41 +08:00
    这个写的不好,默认了只会输入中文或者标点,其实其他语言字符或者 emoji 也能被这个正则匹配到。纯正则写满足一种的,把后三个括号里的去掉可以,满足更多的,就不好写了。
    coolan
        4
    coolan  
       2021-09-14 21:51:21 +08:00
    (?!^[a-zA-Z]+$)排除了纯大写,纯小写,大小写混合的密码,这个也不对。
    MinYa
        5
    MinYa  
    OP
       2021-09-14 22:08:59 +08:00
    假定标点符号为以下字符 ._~!@#$^&*(这里标点符号产品暂未确定)

    1.首先正则判断是否满足至少两个条件
    /(?!^[a-z]+$)(?!^[A-Z]+$)(?!^[\d]+$)(?!^[._~!@#$^&*]+$)^[a-zA-z\d._~!@#$^&*]{6,20}$/g
    2.逻辑依次判断满足条件的次数
    /[a-z]+/ 匹配包含小写字母(通过+1)
    /[A-Z]+/ 匹配包含大写字母(通过+1)
    /[\d]+/ 匹配包含数字(通过+1)
    /[._~!@#$^&*]+/ 匹配包含特殊字符(通过+1)

    我感觉这样可以实现了。感谢楼上的思路
    napsterwu
        6
    napsterwu  
       2021-09-14 22:33:04 +08:00
    这种为啥要用正则呢,整个字符串遍历一下 O(N)就可以解决的事情
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1995 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 00:22 · PVG 08:22 · LAX 16:22 · JFK 19:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.