gpt4 book ai didi

用于密码验证的正则表达式 (ASP)

转载 作者:行者123 更新时间:2023-12-04 22:09:23 24 4
gpt4 key购买 nike

有人可以建议一个正则表达式来验证具有以下条件的密码。

  • 密码长度必须至少为 12 个字符
  • 密码不能以数字开头
    • 密码必须具有以下 4 个特征中的 3 个:
    • 至少一个大写字母 (A-Z)
    • 至少一个小写字母 (a-z)
    • 至少一个数字(0-9)
    • 至少有以下符号之一:连字符 (-)、下划线 (_)、美元 ($)、井号/井号 (#)

我正在使用 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

这是正则表达式的注释版本:(在 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';

这假定密码不能包含除以下字符以外的字符:[A-Z][a-z][0-9][-_$#]。还假定密码可能包含所有 4 种类型的字符。

:“4 个要求中的 3 个” 在这里通过蛮力解决(通过明确指定所有可能的案例组合作为一组备选方案 - 并为每个案例重复通用表达式)。这在这里有效,因为只有 4 种可能的情况需要测试,但如果有更多要求(例如,“必须满足 20 种要求中的 5 种......”),这种方法会变得非常笨拙。正如其他人所说,将其分成多个部分有一定的优势,例如您可以为每种故障模式提供自定义错误消息。

但这可以用一个正则表达式来完成!

2011-10-20 编辑:通过用更精确的贪婪表达式替换惰性点星,提高了 4 个需求前瞻表达式的效率。

关于用于密码验证的正则表达式 (ASP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7827484/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com