javascript node IE中的RegExp兼容性




js regexp find (2)

正則表達式有一些問題。 試試這個:

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

這是:

^                    # 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
^(?=[\w\-%&?#=]+\d)(?=[\w\-%&?#=]+[a-zA-Z])[\w\-%&?#=]{8,12}$

意思是在基於JavaScript的新密碼檢查中符合以下條件,

  • 必須包含至少8到20個字符,強制包括一個字母和數字
  • 可能只包含以下特殊字符之一:%,&,_,?,#,=, -
  • 不能有任何空格

用上面的正則表達式, goog123#在FF3.5中匹配。 但是,這在IE6中失敗。 有人知道這裡出了什麼問題嗎? 這是兼容性問題嗎?

JavaScript用來測試匹配

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 

Answer #1

這是我通過篩選發現的。

  1. 計算出現次數較少時,計數從第一次預測匹配結束開始。 儘管如此,最終的比賽只能從字符串開始。
  2. 對於上數,行為如預期。

這個問題的最終正則表達式是

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




compatibility