^(?=[\w\-%&?#=]+\d)(?=[\w\-%&?#=]+[a-zA-Z])[\w\-%&?#=]{8,12}$
Был предназначен для соответствия ниже условий в основанной на JavaScript проверке нового пароля,
С вышеупомянутым regex, 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
Это то, что я обнаружил при некотором просеивании.
Последнее регулярное выражение для этой проблемы:
/(?=^[\w%&?#=-]{8,12}$)(?=.+\d)(?=.+[a-zA-Z]).+/
Регулярное выражение имеет ряд проблем. Попробуйте вместо этого:
^(?=.{,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