求大佬指点 js 正则,拜谢

2021-09-14 20:07:21 +08:00
 MinYa

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

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

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

730 次点击
所在节点    正则表达式
6 条回复
AoEiuV020
2021-09-14 20:32:41 +08:00
不懂帮顶,这怎么看都不该用正则,
cont
2021-09-14 21:10:01 +08:00
这个正则思路大概是:排除中文和空格,排除纯字母的字符串,排除纯数字的字符串,排除纯非字母和数字的字符串。

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

所以改造的方法是增加或减少要排除的条件。
coolan
2021-09-14 21:39:41 +08:00
这个写的不好,默认了只会输入中文或者标点,其实其他语言字符或者 emoji 也能被这个正则匹配到。纯正则写满足一种的,把后三个括号里的去掉可以,满足更多的,就不好写了。
coolan
2021-09-14 21:51:21 +08:00
(?!^[a-zA-Z]+$)排除了纯大写,纯小写,大小写混合的密码,这个也不对。
MinYa
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
2021-09-14 22:33:04 +08:00
这种为啥要用正则呢,整个字符串遍历一下 O(N)就可以解决的事情

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/801839

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX