开发者

JavaScript RegExp compatibility in IE

开发者 https://www.devze.com 2022-12-13 19:58 出处:网络
^(?=[\\w\\-%&?#=]+\\d)(?=[\\w\\-%&?#=]+[a-zA-Z])[\\w\\-%&?#=]{8,12}$ Was meant to match the below conditions in a JavaScript based new-password check,
^(?=[\w\-%&?#=]+\d)(?=[\w\-%&?#=]+[a-zA-Z])[\w\-%&?#=]{8,12}$

Was meant to match the below conditions in a JavaScript based new-password check,

  • Must contain minimum 8 to 20 characters, mandatorily including one letter and number
  • May include only one of the following special characters: %,&, _, ?, #, =, -
  • Cannot have any spaces

With above regex, goog123# was matched in FF开发者_开发技巧3.5. However this fails in IE6. Anyone knows what went wrong here? Is this a compatibility issue?

JavaScript used to test the matching

function fnIsPassword(strInput)
{
  alert("strInput : " + strInput);
  var regExp =/^(?=.{0,19}\d)(?=.{0,19}[a-zA-Z])[\w%&?#=-]{8,20}$/;
  if(strInput.length > 0){
     return (regExp.test(strInput));
  }
  return false;
}
alert(fnIsPassword("1231231")); //false 
alert(fnIsPassword("sdfa4gggggg")); //FF: true, false in IE  
alert(fnIsPassword("goog1234#")); //FF: true , false in IE 


The regex has a number of issues. Try this one instead:

^(?=.{,19}\d)(?=.{,19}[a-zA-Z])[\w%&?#=-]{8,20}$

which is:

^                    # start-of-string
(?=.{,19}\d)         # look-ahead: a digit within 20 chars
(?=.{,19}[a-zA-Z])   # look-ahead: a letter within 20 chars
[\w%&?#=-]{8,20}     # 8 to 20 chars of your allowed range
$                    # end-of-string


This is what i found with some sifting.

  1. While finding the lower count for occurrences, counting starts from the end of the first lookahead match. Albeit this, final matches will be made only from the start of the string.
  2. For upper count, behavior is as expected.

The final regex for this issue is

/(?=^[\w%&?#=-]{8,12}$)(?=.+\d)(?=.+[a-zA-Z]).+/
0

精彩评论

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