Совместимость JavaScript с RegExp в IE - PullRequest
5 голосов
/ 14 декабря 2009
^(?=[\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 

Ответы [ 2 ]

4 голосов
/ 14 декабря 2009

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

^(?=.{,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
1 голос
/ 17 декабря 2009

Это то, что я нашел с некоторым просеиванием.

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

Окончательное регулярное выражение для этого вопроса:

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