m0d*_*st0 2 regex vbscript asp-classic
有人可以建议使用正则表达式来验证具有以下条件的密码.
我正在使用vbscript和经典ASP.
在此先感谢,m0dest0
虽然有点笨拙,但这可以在单个正则表达式中完成,如下所示:
Dim myRegExp
Set myRegExp = New RegExp
myRegExp.Pattern = "^(?=.{12})(?![0-9])(?:(?=[^a-z]*[a-z])(?=[^0-9]*[0-9])(?=[^\-_$#]*[\-_$#])|(?=[^A-Z]*[A-Z])(?=[^0-9]*[0-9])(?=[^\-_$#]*[\-_$#])|(?=[^A-Z]*[A-Z])(?=[^a-z]*[a-z])(?=[^\-_$#]*[\-_$#])|(?=[^A-Z]*[A-Z])(?=[^a-z]*[a-z])(?=[^0-9]*[0-9]))[A-Za-z0-9-_$#]+$"
If myRegExp.Test(SubjectString) Then
' Successful match
Else
' Match attempt failed
End If
Run Code Online (Sandbox Code Playgroud)
这是正则表达式的注释版本:(在PHP自由间隔模式语法中 - 可以由凡人读取):
$re_password = '/
# Match password having multiple, specific requirements.
^ # Anchor to start of string.
(?=.{12}) # Password must be at least 12 characters long.
(?![0-9]) # Password must not begin with a number.
(?: # Password must have 3 out of 4 characteristics:
# Either... Case 1: (All but R1).
(?=[^a-z]*[a-z]) # R2: At least one lower case letter (a-z).
(?=[^0-9]*[0-9]) # R3: At least one number (0-9).
(?=[^-_$\#]*[-_$\#]) # R4: At least one of: [-_$#].
| # Or... Case 2: (All but R2).
(?=[^A-Z]*[A-Z]) # R1: At least one upper case letter (A-Z).
(?=[^0-9]*[0-9]) # R3: At least one number (0-9).
(?=[^-_$\#]*[-_$\#]) # R4: At least one of: [-_$#].
| # Or... Case 3: (All but R3).
(?=[^A-Z]*[A-Z]) # R1: At least one upper case letter (A-Z).
(?=[^a-z]*[a-z]) # R2: At least one lower case letter (a-z).
(?=[^-_$\#]*[-_$\#]) # R4: At least one of: [-_$#].
| # Or... Case 4: (All but R4).
(?=[^A-Z]*[A-Z]) # R1: At least one upper case letter (A-Z).
(?=[^a-z]*[a-z]) # R2: At least one lower case letter (a-z).
(?=[^0-9]*[0-9]) # R3: At least one number (0-9).
) # End group of 3-out-of-4 alternatives.
[A-Za-z0-9-_$\#]+ # Match the password string.
$ # Anchor to end of string.
/x';
Run Code Online (Sandbox Code Playgroud)
这假定一个密码不能包含比其他字符:[A-Z],[a-z],[0-9]和[-_$#].还假设密码可能包含来自所有4种类型的字符.
:"4个中有3个要求"在这里通过强力解决(通过明确指定所有可能的案例组合作为一组备选方案 - 并重复每个案例的公共表达式).这在这里有效,因为只有4种可能的情况需要测试,但是如果有更多要求(例如"必须满足20个要求中的5个......"),这种方法会变得非常笨拙.正如其他人所说,将其分解为多个部分有一定的优势,例如,您可以在每种故障模式下都有自定义错误消息.
但这可以用一个正则表达式完成!
编辑2011-10-20:通过用更精确的贪婪表达式替换懒点星来提高4个要求前瞻表达式的效率.