2016-12-16 3 views
0

Не могу понять, почему эта буквенно-цифровая проверка/проверка не работает. Я отключил другие параметры переключателя (что все работает), потому что единственная проверка, которая не работает, - else if (!(pswRegex.test(inputValue))). Я не эксперт jQuery/Javascript, так что я что-то упускаю?Буквенно-цифровая проверка

Проверка регулярного выражения должна содержать только пароль , если он составлен буквами (столица или не капитал) и номерами.

$(document).ready(function(){ 

    $('.req').on('input', function() { 
     var inputID = $(this).attr('id'); 
     var inputValue = $(this).val(); 
     var valueLenght = $(this).val().length; 

     switch (inputID) { 
      case "psw": 
      var pswRegex = /^[a-zA-Z0-9]+$/; 
      if (valueLenght < 8) { 
       $('#subButton').prop('disabled', true); 
       $('#err' + inputID).show().text("Password must be 8 carachters minimum"); 
      } 
      else if (!(pswRegex.test(inputValue))) { 
       $('#subButton').prop('disabled', true); 
       $('#err' + inputID).show().text("Password must be alphanumeric"); 
      } 
      else { 
       $('#subButton').prop('disabled', false); 
       $('#err' + inputID).hide(); 
      } 
     break; 
     } 
    }); 

}); 

[EDIT]: то, что я хотел добиться показывало ошибку, если inputValue строка содержала только буквы или только номера: пользователь должен предоставить буквенно-цифровой пароль. Благодаря Aioros и Peeyush Kushwaha я понял, что я не могу этого добиться только регулярного выражения (по крайней мере, с моим фактическим знанием о регулярных выражениях), поэтому я изменил свои else if состояния с этим:

else if (/^[0-9]+$/.test(inputValue) || /^[a-zA-Z]+$/.test(inputValue)) { 
       $('#subButton').prop('disabled', true); 
       $('#err' + inputID).show().text("Password must be composed by both letters and numbers"); 
      } 

[EDIT 2]: другое чистое и изящное решение, предоставленное PanterA. Только с одним if вы можете отобразить (только) заявление об ошибке для пользователя, в котором говорится, что пароль должен состоять как минимум из 8 карачаеров длиной и составлен по крайней мере: одна заглавная буква, одна строчная буква и одно число ,

var pswRegex = /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9]).{8,}$/; 
if (!pswRegex.test(inputValue)) { 
    $('#subButton').prop('disabled', true); 
    $('#err' + inputID).show().text("Password must be at least 8 carachters long and composed by, at least, one capital letter, one lower case letter and one number"); 
} 
+3

Кажется, что он отлично работает в [скрипке] (https://jsfiddle.net/w7890gLj/). Что не работает для вас именно так? Какой вклад? – Aioros

+0

@Aioros Возможно, я использую регулярное выражение 'test()' неверным образом, но давайте предположим, что 'var inputValue =" asdwerasd ";' -> это должно возвращать 'false' из этой проверки' (! (PswRegex. test (inputValue))) 'и в вашем файле напечатать в консоли.log 'regex', правильно? Проблема в том, что он пропускает проверку, как будто это всегда 'истина', отображающая' ok' в вашем примере и оператор 'else' в моем – Brigo

+2

@brigo. Он не должен возвращать false,'/^ [a-zA-Z0- 9] + $/'означает« любой символ или цифра » –

ответ

0

Это регулярное выражение может помочь вам:

/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9]).*$/ 

lookahead Положительный (?=) соответствует что-нибудь в его круглых скобках, не будучи частью результата. Здесь мы хотим, чтобы регулярное выражение находило минимальное значение чего-либо (.*?), за которым следуют символы, которые мы хотим использовать (например, буквы верхнего уровня).

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

  • По крайней мере один прописной буквы: (?=.*?[A-Z])
  • По крайней мере один символ нижнего регистра: (?=.*?[a-z])
  • По крайней мере одна цифра: (?=.*?[0-9])

Проверьте: https://jsfiddle.net/q7do1woL/

Кроме того, если вы хотите, чтобы проверить длину строки с регулярным выражением, вы можете добавить квантор с минимальным значением:

/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9]).{8,}$/ 

Надеется, что это помогает.

+0

Это классный помощник! Я никогда не заходил так глубоко в регулярные выражения, потому что они меня немного испугало, но это самое чистое решение для моей проблемы! Спасибо, я собираюсь больше узнать о регулярном выражении – Brigo

Смежные вопросы