密码校验的正则 /(?!.*[\u4E00-\u9FA5\s])(?!^[a-zA-Z]+$)(?!^[\d]+$)(?!^[^a-zA-Z\d]+$)^.{6,20}$/g
当前规则是 6-20 位,大写字母,小写字母,数字和标点符号(除空格)满足两种即可。
如果我想改造这个正则,分别判断满足一种,二种,三种,四种应该怎么改写,正则不会写,拜谢大佬们了
1
AoEiuV020 2021-09-14 20:32:41 +08:00 via Android
不懂帮顶,这怎么看都不该用正则,
|
2
cont 2021-09-14 21:10:01 +08:00
这个正则思路大概是:排除中文和空格,排除纯字母的字符串,排除纯数字的字符串,排除纯非字母和数字的字符串。
那符合的情况就是至少满足两种规则的字符串。 所以改造的方法是增加或减少要排除的条件。 |
3
coolan 2021-09-14 21:39:41 +08:00
这个写的不好,默认了只会输入中文或者标点,其实其他语言字符或者 emoji 也能被这个正则匹配到。纯正则写满足一种的,把后三个括号里的去掉可以,满足更多的,就不好写了。
|
4
coolan 2021-09-14 21:51:21 +08:00
(?!^[a-zA-Z]+$)排除了纯大写,纯小写,大小写混合的密码,这个也不对。
|
5
MinYa OP 假定标点符号为以下字符 ._~!@#$^&*(这里标点符号产品暂未确定)
1.首先正则判断是否满足至少两个条件 /(?!^[a-z]+$)(?!^[A-Z]+$)(?!^[\d]+$)(?!^[._~!@#$^&*]+$)^[a-zA-z\d._~!@#$^&*]{6,20}$/g 2.逻辑依次判断满足条件的次数 /[a-z]+/ 匹配包含小写字母(通过+1) /[A-Z]+/ 匹配包含大写字母(通过+1) /[\d]+/ 匹配包含数字(通过+1) /[._~!@#$^&*]+/ 匹配包含特殊字符(通过+1) 我感觉这样可以实现了。感谢楼上的思路 |
6
napsterwu 2021-09-14 22:33:04 +08:00
这种为啥要用正则呢,整个字符串遍历一下 O(N)就可以解决的事情
|