Совместимость JavaScript RegExp в IE

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

Был предназначен для соответствия ниже условий в основанной на JavaScript проверке нового пароля,

  • Должен содержать минимальные 8 - 20 символов, в обязательном порядке включая одну букву и число
  • Может включать только один из следующих специальных символов: %, и, _?, #, =, -
  • Не может иметь никаких пробелов

С вышеупомянутым 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 
5
задан Yi Jiang 13 June 2011 в 04:36
поделиться

2 ответа

Это то, что я обнаружил при некотором просеивании.

  1. При нахождении меньшего числа вхождений, счет начинается с конца первого предварительного совпадения. Несмотря на это, окончательные совпадения будут происходить только с начала строки.
  2. Для верхнего счета поведение соответствует ожидаемому.

Последнее регулярное выражение для этой проблемы:

/(?=^[\w%&?#=-]{8,12}$)(?=.+\d)(?=.+[a-zA-Z]).+/
1
ответ дан 14 December 2019 в 19:15
поделиться

Регулярное выражение имеет ряд проблем. Попробуйте вместо этого:

^(?=.{,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
4
ответ дан 14 December 2019 в 19:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: