我验证的密码必须是至少包含一位数字和一个大写字母的字母和数字。我使用以下RegEx表达式来执行此操作:
(?=(^[a-zA-Z0-9]{6,16})$)(?=.*\d)(?=.*[A-Z])
使用此模式,密码" Valid101"应该是有效的,并且它在A Better .NET Regular Expression Tester和REGEX TESTER处按预期工作。但是,当我在我的ASP.NET用户控件的RegularExpressionValidator中使用它时,它错误地决定了密码" Valid101"无效。
我希望有人可以提出可能出错的地方。
答案 0 :(得分:1)
您所拥有的模式只包含零宽度断言和前瞻。它们不使用它们匹配的文本,因此正则表达式匹配后的匹配值是一个空字符串。 RegularExpressionValidator需要一个完整的字符串匹配(即匹配的字符串应该是整个输入字符串)。
所以,而不是(?=(^[a-zA-Z0-9]{6,16})$)(?=.*\d)(?=.*[A-Z])
使用
^(?=.*\d)(?=.*[A-Z])[a-zA-Z0-9]{6,16}$
它将确保字符串中有一个数字和一个大写的ASCII字母,然后匹配(消耗)6到16个ASCII字母和数字。