使用正则表达式

时间:2016-03-21 16:15:59

标签: c# regex

我需要检查密码是否至少包含:

  • 一个号码;
  • 一个小写字符;
  • 一个大写字母;
  • 一个特殊符号(。,@ etc)

我在C#中有以下内容:

@"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]"

但这不是在验证:

"Ab!123"

我错过了什么?

更新

我在System.ComponentModel.DataAnnotations中使用它来验证模型属性:

  [RegularExpression(@"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]"]    
  public String Password { get; set; }

1 个答案:

答案 0 :(得分:2)

简单明了:你没有量词。使用

@"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]+"

相反(请参阅表达式末尾的+?)查看有效的demo on regex101.com
与注释相反,点不需要用方括号([])进行转义。此外,您仍然可以优化表达式:

@"^(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])(?=\D*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]+"