我正在尝试使用C ++中的正则表达式来验证使用随机密码生成器函数生成的密码。
密码的规则是: 密码总长度为8个字母。密码可以是4个大写字母和4个数字或6个大写字母和2个数字。
有效示例:
我正在使用表达式: / ^(?= {8} $)([A-Z] {4,6})([0-9] {2,4})\ W + /克
和网站来测试表达式: http://regexr.com/3frd4
当范围保持为 {1,4} 时,它会起作用,但如果我将范围更改为 {2,4} ,则第二个示例密码将失败。
单击详细信息按钮显示第一个示例密码:ABCD1234,
捕获组#1捕获ABCD&捕获组#2仅捕获123(不是1234?)。
对于第二个示例密码:PQRSTU88,
捕获组#1捕获PQRSTU&捕获组#2仅捕获8(不是88?)。
从我的理解{2,4}指定至少2个数字到最多4个数字。那么为什么我的正则表达式在第二个例子的情况下不适用于该范围。
答案 0 :(得分:2)
您的第二个字符串未通过验证,因为它只包含5个字母和2个数字,但您的正则表达式后面至少需要再添加1个字符。
密码长度必须为8个字母。密码可以是4个大写字母和4个数字或6个大写字母和2个数字。
您需要使用
^(?:[A-Z]{4}[0-9]{4}|[A-Z]{6}[0-9]{2})$
请参阅regex demo。
<强>详情:
^
- 字符串开头(?:
- 轮换组开始
[A-Z]{4}
- 4个大写ASCII字母[0-9]{4}
- 4位数(总共8位)|
- 或
[A-Z]{6}
- 6个大写ASCII字母[0-9]{2}
- 2位数(总共8位))
- 交替小组的结尾$
- 字符串结束。