C# 用于复杂密码的正则表达式

C# 用于复杂密码的正则表达式,c#,.net,regex,asp.net-mvc,data-annotations,C#,.net,Regex,Asp.net Mvc,Data Annotations,我将这个正则表达式作为C#.NETMVC项目中密码字段的数据注释 [RegularExpression("(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[*+\\/|!\"£$%^&*()#[\\]@~'?><,.=-_]).{6,}", ErrorMessage = "Password must be between 6 and 20 characters and contain one uppercase letter, one lowerc

我将这个正则表达式作为C#.NETMVC项目中密码字段的数据注释

[RegularExpression("(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[*+\\/|!\"£$%^&*()#[\\]@~'?><,.=-_]).{6,}", ErrorMessage = "Password must be between 6 and 20 characters and contain one uppercase letter, one lowercase letter, one digit and one special character.")]

[RegularExpression(((?=.[0-9])(?=.[a-z])(?=.[*+\/[a-z])(?=.[*+\/[124;!\”)($^&*.[\\]@'?>您忘了正确地转义
]
(建议甚至将它放在字符类的开头,以便在.NET中它可以被解析为文本
]
-对于客户端验证,它甚至需要在那里转义)请记住,字符类中的连字符会创建一个范围(例如,
[=-\]
),因此必须将其放在字符类的末尾/开头,或放在末尾以表示文字
-

使用

其中
[\W\u]
匹配除单词字符以外的任何字符(即
[^\p{L}\p{N}}
或-在客户端-
[^a-zA-Z0-9\u]
)+

^
$
锚定在RegularExpressionAttribute模式中是多余的,但它们不会造成任何伤害


请参阅。

我个人认为我不会将所有这些要求都塞进一个正则表达式中。您可以使用
string.length
进行长度检查,然后您可以使用3个简单的正则表达式来表示某一类型的最少一个字符。这将更具可读性,更易于维护。还发现以下内容s工作得很好:-
“(?=.[0-9])(?=.[a-z])(?=.[a-z])(?=.[\\W])。{6,}”
,其中\\W表示任何非字母和非数字。这取决于您,我不知道要求。问题在于过早关闭的字符类。在
.[*+\/\\/\\!“$code>中
.
.
之前的
.
.[%^-*.[\]>
"^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[\]*+\\/|!\"£$%^&*()#[@~'?><,.=_-]).{6,}$"
                                         ^^                             ^
"^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[\W_]).{6,}$"