regex 用于密码验证的正则表达式不起作用

xxe27gdn  于 2023-05-08  发布在  其他
关注(0)|答案(1)|浏览(132)

我有一个正则表达式,它应该适用于像P@ssword1234这样的密码。但似乎并不匹配。我在Angular中使用了相同的正则表达式,并且成功了
这是下面的密码条件

// 10 characters or more
// at least one digit
// at least one uppercase letter
// at least one lowercase letter
// at least one special character 

[DisplayName("Password")]
[Required(ErrorMessage = "Please enter your password.")]
[DataType(DataType.Password)]

[RegularExpression(@"^(?=.*[!@#$%^&*(),.?"":{}|<>])(?=.*[a - z])(?=.*[A - Z])(?=.*\d)[a-zA-Z\d!@#$%^&*(),.?"":{}|<>]{10,}$",
 ErrorMessage = "Password must contain at least 10 characters, including at least 1 uppercase letter, at least 1 lowercase letter, at least one number and a special character.")]
ax6ht2ek

ax6ht2ek1#

你的错误是把[a-z]写成了[a - z]。前者实际上意味着“字母a,或<space><space>之间的任何字符,或字母z”。换而言之,只有字符a、``和z
下面是“fixed”正则表达式:

@"^(?=.*[!@#$%^&*(),.?"":{}|<>])(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d!@#$%^&*(),.?"":{}|<>]{10,}$"

Demo
然而,正如上面的评论中提到的,我建议不要在密码中放置这样一个任意的“必需特殊字符”列表。把这个定义得更宽松一些不是更好吗?“任何不是字母或数字的东西都有资格成为‘特殊’”?
你可以用类似这样的东西来实现:

^(?=.*[^a-zA-Z0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{10,}$

相关问题