在web.config中组合2个正则表达式passwordStrengthRegularExpression =“”

时间:2013-07-31 12:06:04

标签: asp.net .net regex

我无法将两个正则表达式组合在一起。密码标准要求:

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

表达式:

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

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

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

两者都是单独运作。

2 个答案:

答案 0 :(得分:2)

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

"(?!.*(?: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:...)?这意味着?:之间的标志仅应用于表达式的那一部分,也就是说,只有该区域不区分大小写。

答案 1 :(得分: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 min密码要求执行此操作,因为您没有可以在正则表达式中访问它。