2013-05-13 5 views
0

Это регулярное выражение:JavaScript regexp?

$("#newpassword").keyup(function(e) { 
    var htm = ""; 
    var pass = this.value; 
    var length = this.value.length; 

    if (pass) { 
    var score = 0; 
    if(length >= 8 && length <= 16) { //PASSWORD MIN/MAX NUMBER OF CHARACTERS 

     var upper = /[A-Z]/; 
     var lower = /[a-z]/; 

     var number = /^[0-9]+$/; //PATTERN FOR NUMBERS 
     var schar = /[[email protected]#$%^&*?_~+-=<>]/; 

     //LOOPS THROUGH PASSWORD TO CHECK FOR AT LEAST ONE OF EACH PATTERN 
     for (i = 0; i < length; i++) { 
     if (pass.substr(i, 1).match(upper)) { 
      var uletters = true; 
      score ++;  
      //AT LEAST ONE LETTER EXISTS 
     } 
     if(pass.substr(i,1).match(lower)) { 
      var lletters = true; 
      score++; 
      //AT LEAST ONE LETTER EXISTS 
     } 
     if(pass.substr(i,1).match(schar)) { 
      var schar = true; 
      score++; 
     } 
     if(pass.substr(i, 1).match(number)) { 
      var numbers = true; 
      var schar = false; 
      //AT LEAST ONE NUMBER EXISTS 
      score++; 
     } 
     } 
    } 
    } 
}); 

ЛЮБЫХ два условия истинно означает пароль в порядке, но приведенный выше код if(numbers == true && schar == true) типа пользователя только номер дисплей пароль ОК.

Пожалуйста, помогите мне в чем проблема в моем коде.

+8

Это поможет вам лучше ответить раньше, если вы потратите время на форматирование вопроса, чтобы его было легко читать. Публикация его таким образом, что код отступается по пути без уважительной причины, не делает этого. Кроме того, ваш код неполный (синтаксическая ошибка, по крайней мере три отсутствующих '}' s). Я собирался очистить его для вас, но я не хочу вводить вводящие в заблуждение отступы. –

ответ

0

Возможно, вы можете использовать RegExp.test() или RegExp.exec(), чтобы «найти» соответствие регулярных выражений в вашей строке, а не итерировать символы самостоятельно.

function validatePwd (pwd) { 
    if (pwd.length < 8) 
     return false; 
    if (pwd.length > 16) 
     return false; 

    var upperPatt = /[A-Z]/; 
    var lowerPatt = /[a-z]/; 
    var numberPatt = /[0-9]/; // FIXED -- this is a better pattern for numbers. 
    var scharPatt = /[[email protected]#$%^&*?_~+-=<>]/; 

    score = 0; 
    if (upperPatt.test(pwd)) 
     score++; 
    if (lowerPatt.test(pwd)) 
     score++; 
    if (numberPatt.test(pwd)) 
     score++; 
    if (specialPatt.test(pwd)) 
     score++; 

    // don't make it too hard for the poor user, please.. 
    // -- they have to type all this horrible rubbish. 
    if (score < 3) {  
     return false; 
    } 

    // OK. 
    return true; 
} 
+0

hai, приведенный выше код работает нормально в количестве и character.but номер пользовательского номера показывает значение 2.what является проблемой в numberpatt и specialpatt.anybody PLZ помочь me.i хотите без разрешенных пробелов. – user2293163

+0

Я думаю, что шаблон номера (вы дали первоначально) был сломан. Пожалуйста, +1 ответ, в любом случае. –

1

Вам не нужно перебирать каждый символ вашего пароля, просто сделайте следующее:

score += upper.test(password)?1:0; 
score += lower.test(password)?1:0; 
score += number.test(password)?1:0; 
score += schar.test(password)?1:0; 

(test возвращает истину или ложь) и проверить счет впоследствии.

В целом рекомендуется не ограничивать себя паролями пользователей. Это серьезно наносит вред пользователю, если им говорят, как должен выглядеть их пароль. Однако вы можете сделать это рекомендацией. (Например, отображать панель: слабый (красный) - сильный (зеленый) пароль. Это гораздо более мотивирует, чем беспокоить пользователя сообщениями об ошибках.) Пусть они передают счет 2 и выше.

+0

+1 для рекомендаций по паролю! –

+0

'score + = upper.test (password)? 1: 0;' может быть сокращен до 'score + = + upper.test (password);' и даже унарный + не нужен. Таким образом, ваш ответ может быть закодирован как «оценка + = upper.test (пароль) + lower.test (password) + number.test (password) + schar.test (пароль);' – HBP

+1

@HBP. Вы можете сделать произвольное количество кодовых игр. Однако вы пишете код только один раз, но читаете как минимум 10 раз. Я всегда предпочитаю читаемость по компактности. Каждый LOC, который заставляет вас думать больше, чем необходимо, вероятно, слишком запутан (как и ваш последний пример). Кроме того, я бы не стал применять принуждение типа к такой тяжелой степени. Всегда думайте о своих бедных коллегах, которые должны перечитать ваш код. ;) – Christoph