正则表达式范围不能用于验证随机生成的密码
问题描述:
我想通过使用正则表达式在C++中验证使用随机密码生成器函数生成的密码。正则表达式范围不能用于验证随机生成的密码
密码的规则是: 密码必须是总共8个字母。密码可以是4个大写字母和4个数字或6个大写字母和2个数字。
有效实例:
- ABCD1234
- PQRSTU88
我用这表达: /^(?=.{8}$)([AZ] {4,6})([0-9] {2,4})\ w +/gm
and this website测试表达式: http://regexr.com/3frd4
它工作时的范围内保持为{1,4}但如果我改变至{2,4}第二示例密码失败。
点击细节按钮显示,对于第一示例密码:ABCD1234,
捕获组#1捕捉ABCD &捕获组#2仅捕获123(未1234?)。
对于第二个例子的密码:PQRSTU88,
捕获组#1捕捉PQRSTU &捕获组#2捕捉只有8(未88?)。
根据我的理解,{2,4}指定至少2个数字至多4个数字。那么为什么我的正则表达式在第二个例子中不适用于该范围。
答
您的第二个字符串未通过验证,因为它仅包含5个字母和2个数字,但您的正则表达式至少需要1个字以后的字符。
密码必须是8个字母的总长度。密码可以是4个大写字母和4个数字或6个大写字母和2个数字。
您需要使用
^(?:[A-Z]{4}[0-9]{4}|[A-Z]{6}[0-9]{2})$
详细:
-
^
- 串 开始
-
(?:
- 交替组开始-
[A-Z]{4}
- 4 ASCII大写字母 -
[0-9]{4}
- 4个位数(8一切的一切)
-
-
|
- 或-
[A-Z]{6}
- 6大写ASCII字母 -
[0-9]{2}
- 2个位数(8总而言之)
-
-
)
- 交替组的端 -
$
- 端字符串。
这是因为'\ w +'。你为什么使用它? –
@WiktorStribiżew我是正式表达的新手,没有完全理解\ w的含义。删除它后,它是正确的。如果您已将此评论发布为答案,我会将其标记为已接受的答案。 – Ghos3t
是的,我发布了一个答案。你接受了,谢谢。我也提出了这个问题。 :)干杯。 –