开发者

ASP.NET Regular Expression Validator Not Working on Internet Explorer 7

开发者 https://www.devze.com 2023-04-13 01:59 出处:网络
I am using the following Regular Expression Validator to ensure th开发者_如何学Ce password enter meets the requirements of 1 upper case, 1 lower case, 1 number, and 1 allowed special character:

I am using the following Regular Expression Validator to ensure th开发者_如何学Ce password enter meets the requirements of 1 upper case, 1 lower case, 1 number, and 1 allowed special character:

    <asp:RegularExpressionValidator ID="rev_txtNewPassword" runat="server" Display="Dynamic"
    ErrorMessage=" Password does not meet requirements" ControlToValidate="txtNewPassword" ValidationGroup="password"
    ValidationExpression="^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[!@#$%^&*]).{8,16}$"></asp:RegularExpressionValidator>

This works in FireFox, Chrome, Safari, Internet Explorer 8 and 9. It just doesn't work on Internet Explorer 7. No matter what is entered into the password box, it says it doesn't meet the requirements. This is part of a custom SharePoint 2010 web part.

Any ideas why the expression validator isn't working only on IE7?

Thanks


As the OP requests, I put the solution here so everybody can view this question as solved. The problem is caused by the IE regex lookahead bug and the original solution is made by Alan Moore. The solution can be found here:

Solution


Even if it worked, how is the user supposed to know how to form a valid password that passes that expression? Are they supposed to keep guessing until they get it? If you need such a complex password, it might be polite to generate it for your users. Even if you list all the rules for the user, they will struggle with it once it gets too complex.

ASP.NET Membership has a basic password generator, e.g.

Membership.GeneratePassword(8, 2);

If you want something more sophisticated, you can roll your own using RNGCryptoServiceProvider.GetBytes() to generate an array of random bytes, then convert those bytes into characters, using a modulo to restrict the range.

Note also that you can set a password strength regex in Membership configuration:

<membership defaultProvider="SqlProvider"
  userIsOnlineTimeWindow = "20>
  <providers>
    <add
      name="SqlProvider"
      type="System.Web.Security.SqlMembershipProvider"
      connectionStringName="SqlServices"
      requiresQuestionAndAnswer="true"
      passwordStrengthRegularExpression="^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[!@#$%^&*]).{8,16}$"
      />
   </providers>
</membership>
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号