【问题标题】:creating a regex that captures these rules [duplicate]创建一个捕获这些规则的正则表达式
【发布时间】:2015-12-05 21:11:53
【问题描述】:

我有以下密码要求,我试图用正则表达式表达,但我很挣扎。任何帮助表示赞赏!

密码必须包含以下 4 种类型中的 3 种字符:

  1. 大写字母
  2. 小写字母
  3. 数字
  4. 特殊字符

我找到了一些类似的例子,如果我对正则表达式的了解更强,我可以弄清楚,但我还没有找到符合“3 of 4”要求的例子。

编辑:

好的,这就是我现在使用的,我目前正在测试它。这看起来对吗?

passwordStrengthRegularExpression="(?=^[^\s]{8,}$)((?=.?\d)(?=.?[AZ])(?=. ?[az])|(?=.?\d)(?=(.\W){1,})(?=.?[az]) |(?=(.\W){1,})(?=.?[AZ])(?=.?[az])|(?=.?\d)(?=.?[AZ])(?=(.\W){1,}))^.*"

【问题讨论】:

  • 说你在挣扎而不展示你尝试过的东西会让人们认为你没有。他们也不知道你已经知道什么,也不想给你一个完整的入门课程。
  • 我是 regex 的初学者,通过挣扎我只是意味着它很困难,我还没有找到任何人遇到完全相同的问题。因此,与此同时,我正在阅读一些教程,但这可能需要一段时间,而且我没有太多时间来完成它,所以这就是我来这里的原因。
  • 我还查看了stackoverflow.com/questions/5142103/regex-for-password-strength,但它没有“只有 3 of 4”的要求。我假设你可以做一个 or 子句,我以链接中的逻辑为例,但现在对我来说几乎都是希腊语。
  • Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems. 放弃依赖于正则表达式的解决方案并使用更易读和可维护的解决方案可能会更好。考虑一下您以后是否需要修改规则以包括长度、字符重复和非字典单词等内容。

标签: regex


【解决方案1】:

类似于https://stackoverflow.com/a/5142164/2606322 我会针对所有 4 个要求执行以下操作

^(?=.*[A-Z])(?=.*[!@#$&*])(?=.*[0-9])(?=.*[a-z]).{8}$

然后将其他 4 个(4 个中的 3 个)可能性加在一起,例如

^
((?=.*[A-Z])(?=.*[!@#$&*])(?=.*[0-9])(?=.*[a-z]).{8})|
((?=.*[!@#$&*])(?=.*[0-9])(?=.*[a-z]).{8})|
((?=.*[A-Z])(?=.*[0-9])(?=.*[a-z]).{8})|
((?=.*[A-Z])(?=.*[!@#$&*])(?=.*[a-z]).{8})|
((?=.*[A-Z])(?=.*[!@#$&*])(?=.*[0-9]).{8})|
$

只有一行。丑陋但可能有效。当然,将 !@#$&* 替换为您喜欢的集合。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-02
    • 2012-02-13
    相关资源
    最近更新 更多