0

我无法组合以下两个正则表达式。密码标准要求:

  • 密码不能包含您的用户名或部分全名超过两个连续字符
  • 密码长度必须至少为 6 个字符
  • 密码必须包含以下三个类别中的字符
    • 大写字符(英文 AZ)
    • 小写字符(英文 az)
    • 以 10 位为基数 (0-9)
    • 非字母字符(例如,!、@、#、$、% 等)

表达:

passwordStrengthRegularExpression="((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20})"

密码不能包含单词“Test”或“test”或单词的变体

passwordStrengthRegularExpression="((?=.*\"^((?!Test|test|TEST).*)$"

两者都单独工作正常。

4

2 回答 2

2

因为您的第二个正则表达式主要使用负前瞻,您可以稍微改造它并将其粘贴在另一个表达式的开头。首先,我要将您的第二个正则表达式更改为:

"(?!.*(?:Test|test|TEST))"

在英语中,字符串不能包含任何数量(或零)个字符,后跟 test。

然后,我将把它贴在你另一个表情的开头

passwordStrengthRegularExpression="^(?!.*(?:Test|test|TEST))(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20}$"

最后,我将向您展示如何只使正则表达式的一部分不区分大小写。这可能会或可能不会受支持,具体取决于这实际上是用于什么程序。

passwordStrengthRegularExpression="^(?!.*(?i:test))(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20}$"

看到了(?i:...)吗?这意味着 the?和 the之间的标志:仅应用于表达式的该部分,即只有该区域不区分大小写。

于 2013-07-31T13:08:38.153 回答
1

结合您的要求和https://stackoverflow.com/a/2860380/156388我想出了这个:

(?=^[^\s]{6,}$)(?!.*(?i:test))((?=.*?\d)(?=.*?[A-Z])(?=.*?[a-z])|(?=.*?\d)(?=.*?[^\w\d\s])(?=.*?[a-z])|(?=.*?[^\w\d\s])(?=.*?[A-Z])(?=.*?[a-z])|(?=.*?\d)(?=.*?[A-Z])(?=.*?[^\w\d\s]))^.*

如果您想满足上面项目符号中的要求,请不要认为您的第一个正则表达式实际上工作正常。钳制到 20 个字符,但没有说你必须这样做。需要所有四个类别,但要求是 4 个中的 3 个。根本不检查用户名要求。所以我已经删除了大部分初始正则表达式。

它匹配这些(如预期的那样):

Short5
TeSamplePrd6
TEBREaKST6
WinningUser6@

它在这些上失败(如预期的那样):

SamplePassword
TestUser6@
Shrt5
TeSTTest

剩下的问题

出于某种原因,它与此匹配:

TEBREKST6

但它只满足四个要求中的两个 + 最小长度 - 不知道为什么?

没有考虑“密码不能包含您的用户名或部分全名超过两个连续字符”的要求,我不确定您是否甚至可以通过 web.config 最小密码要求执行此操作,因为您无权访问它在正则表达式中。

于 2013-07-31T12:58:09.290 回答