具有显式选项的正则表达式

时间:2015-11-09 18:03:47

标签: c# asp.net regex

如果密码的文本框(ASP.NET)至少具有

,我需要在保存之前检查

一个或多个小写字母,无论顺序如何 一个或多个大写的字符,无论顺序如何 一个或多个数字,无论顺序 一个或多个这个特殊字符“!#$%&%'()* ... 和最小长度o 8 char

如何用Regex Expression做到这一点?

ex: #Abc123aB (valid)
    abcAbc123aB123&  (valid)
    abc123abc (invalid) missing uppercase and special char

被修改

<tr>
  <td>Password</td>
  <td><asp:TextBox ID="txtClave" TextMode="Password"  runat="server" > </asp:TextBox>&nbsp; 
  <div id="divmensaje" style="display:inline-block">
  <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="txtClave" ValidationExpression="^[A-Za-z0-9_\.\*#]{8,25}$" ErrorMessage="Wrong format"></asp:RegularExpressionValidator>
  </div> 
  </td>                
</tr>

提前感谢您的时间和支持

2 个答案:

答案 0 :(得分:0)

尽管可以这样做,但我不会尝试使用单个regex来解决它。避免代码行有什么意义?代码变得更加复杂,我相信它也会变慢。

我会使用.Length检查长度(比使用regex更快),然后使用小而简单的regex来检查每种字符类型。

答案 1 :(得分:0)

String password = "Aa!1asdetD"
HashSet<char> specialCharacters = new HashSet<char>() { '!', '@', '%', '$', '#' };
if (password.Any(char.IsLower) && //Lower case 
     password.Any(char.IsUpper) &&
     password.Any(char.IsDigit) &&
     password.Length > 8
     password.Any(specialCharacters.Contains))
{
  //valid password
}

采取形式Regex for strong password in ASP.net

另外,我想我会发布这个 - 它花了一点时间,但我相信这也应该达到你想要的效果

^(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*\W).+$