正则表达式在IE中失败,但在Chrome和Firefox中有效吗?

时间:2010-07-13 20:11:11

标签: asp.net regex

我有以下asp.net标记:

<asp:TextBox ID="txtPassword" runat="server" TextMode="Password"   
ValidationGroup="passwordValidation"></asp:TextBox>

<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" Display="Dynamic"
ControlToValidate="txtPassword" Text="Required" ValidationGroup="passwordValidation" />

<asp:RegularExpressionValidator runat="server" ControlToValidate="txtPassword"  
Text="Passwords should contain a minimum of 7 characters with at least one numeric 
character." ValidationExpression="^(?=.*\d{1})(?=.*[a-zA-Z]{2}).{7,}$"  
ValidationGroup="passwordValidation" Display="Dynamic"></asp:RegularExpressionValidator>

如果我输入类似test1234的密码,它会传入chrome和firefox,但是我的密码应至少包含7个字符且至少包含一个数字字符的消息显示在Internet Explorer中

1 个答案:

答案 0 :(得分:2)

你可能会被臭名昭着的IE regex lookahead bug咬伤。你应该能够通过使长度检查像其他条件一样前瞻,并把它放在第一位来解决这个问题。

^(?=.{7,}$)(?=.*\d)(?=.*[a-zA-Z]{2}).*

但我认为我看到了另一个问题。 (?=.*[a-zA-Z]{2})匹配两个连续的字母;这真的是你的意图吗?如果您想要至少两个字母,但不一定要连续,则应使用(?=.*[a-zA-Z].*[a-zA-Z])