2016-03-21 92 views
0

我需要检查,如果一个密码至少包含:验证密码与正则表达式

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

我在C#中的以下内容:

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

但这不是验证:

"Ab!123" 

我缺少什么?

UPDATE

我用这与System.ComponentModel.DataAnnotations来验证模型属性:

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

我认为你需要逃避的S – DrewJordan

+0

我更新了我的问题......其实我不是逃避,因为我的字符串 –

+0

其实是之前有@“”更简单:你没有“。”在你的“特殊字符”组中。 – DrewJordan

回答

2

朴素简单:你没有一个量词。使用

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

代替(见+在表达式的结尾)有关工作demo on regex101.com
与注释相反,点不需要在方括号中转义([])。此外,你还可以优化你的表达:

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

谢谢!这工作得很好..他们两个。 –

+0

@Miguel:很高兴能有任何帮助。 – Jan