1

我有以下正则表达式来验证密码是否包含至少一个大写字母、至少一个小写字母和至少一个数字。

Regex rxLowercase = new Regex( @"\p{Ll}" ); // Unicode: All lowercase letters
Regex rxUppercase = new Regex( @"\p{Lu}" ); // Unicode: All uppercase letters
Regex rxDigits = new Regex( @"\p{Nd}" ); // Unicode: All decimal digits

我想把一个属性放到一个特定的属性上,比如

[RegularExpression( /* something here which combines above expressions */ )]
[StringLength( 1024, MinimumLength = 8 )]
public string NewPassword
{
    get;
    set;
}

如何做到这一点?

4

2 回答 2

3

由于您的正则表达式都是从字符串初始化的,因此只需使 RegularExpression 属性的构造函数接受一个字符串数组。

我建议将 NewPassword 更改为一种方法(您永远不应该实现密码,以便您可以获取该值,对它们进行散列并比较散列以找出密码是否匹配)。

然后要从方法中获取属性,请使用以下内容:

var attribute = (RegularExpression)typeof(YourClass).GetMethod("NewPassword")
    .GetCustomAttributes(typeof(RegularExpression), false).First();
于 2013-10-23T12:17:18.540 回答
1

您可以使用三种不同的前瞻方式将它们组合起来,如下所示:

(?=.*\p{Ll})(?=.*\p{Lu})(?=.*\p{Nd})
于 2013-10-23T12:25:09.107 回答