2013-05-04 5 views
0

Извините, если это глупый вопрос. Я делаю тему веб-дизайна в uni и полностью застрял. Я должен проверить пароль с помощью Javascript, чтобы убедиться, что он имеет и uppsercase, строчный, числовой символ и не менее 4 символов.Пароль - символы верхнего регистра JavaScript

Это код, который у меня есть, он дает мне оповещения о том, что я НЕ включил персонажей, но когда я включил их, я все равно получаю предупреждение. Любая помощь оценивается.

var y = document.forms["loginDetails"]["password"].value; 
if (y.length < 4) { 
    alert("Your password needs a minimum of four characters") 
} 
if (y.search[/a-z/i] < 1) { 
    alert("Your password needs a lower case letter") 
} 
if (y.search[/A-Z/i] < 1) { 
    alert("Your password needs an uppser case letter") 
} 
if (y.search[/0-9/] < 1) { 
    alert("Your password needs a number") 
    return false; 
} 
+0

Я считаю, что вам не хватает [] в вашем регулярном выражении. Это должно быть, например,/[A-Z]/ – lopisan

+1

Я думаю, что проблема была указана, но я также отмечу, что это раздражающий и бессмысленный способ обеспечить соблюдение хороших паролей. По крайней мере, уменьшите количество произвольных ограничений, наложенных с увеличением длины (например, если я хочу установить «hitheremynameisjohnny», это гораздо безопаснее, чем 'P4ss') – Dave

+1

О, и вы ищете верхний/нижний регистр , но вы устанавливаете флаг 'i', что означает игнорировать регистр. – Dave

ответ

0

Обратите внимание, что «поиск» является функция, так что вы должны назвать его как y.search(), а не с [] скобки (те, которые используются для доступа к элементу. У «поиск» будет имеют тот же эффект, но поиск [] не в порядке, потому что это не массив

+0

Это не обязательно должен быть массив. Вы можете получить доступ к свойствам объектов функций, а также квадратным скобкам - хотя здесь явно не нужен, это синтаксис :-) – Bergi

1

Попробуйте изменить код таким образом, путем:.

  • Добавление return false; к каждому заявлению отказа
  • Изменение search() функция синтаксис.
  • Вам не нужно использовать /i, так как он не проверяет чехлы.

Код

var y = document.forms["loginDetails"]["password"].value; 
if (y.length < 4) { 
    alert("Your password needs a minimum of four characters") 
    return false; 
} 
if (y.search(/[a-z]/) < 1) { 
    alert("Your password needs a lower case letter") 
    return false; 
} 
if (y.search(/[A-Z]/) < 1) { 
    alert("Your password needs an uppser case letter") 
    return false; 
} 
if (y.search(/[0-9]/) < 1) { 
    alert("Your password needs a number") 
    return false; 
} 
+2

'/ i' делает регистр нечувствительным. Если он проверяет случай конкретно, вы должны удалить это ... –

+0

@AdamPlocher Спасибо за подсказку. :) Изменено. ':)' –

+0

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

2

Ваш код был несколько ошибок

  • Comparision должен быть <0 не <1 (search возвращает отрицательное значение, если регулярное выражение не найден)
  • /i в регулярном выражении (без учета регистра - не подходит, когда пытаясь выяснить, верхний/нижний регистр символов)
  • вызов функции поиска был не прав (использование [] вместо ())
  • в регулярном выражении [] отсутствовал ([] в регулярном выражении означает один символ из заданного диапазона, так [a-z] будет соответствовать каждый символ в нижнем регистре, тогда как a-z будет соответствовать только строка 'а-г')

Он должен выглядеть следующим образом:

if (y.length < 4) { 
    alert("Your password needs a minimum of four characters") 
} else if (y.search(/[a-z]/) < 0) { 
    alert("Your password needs a lower case letter") 
} else if(y.search(/[A-Z]/) < 0) { 
    alert("Your password needs an uppser case letter") 
} else if (y.search(/[0-9]/) < 0) { 
    alert("Your password needs a number") 
} else { 
    // Pass is OK 
} 
2

Было несколько вопросов, с кодом:

  1. String.search() возвращает -1, если регулярное выражение не найдено. Ошибка против < 1 будет по-прежнему возвращать true, если строка найдена на знаке 0th (первый).
  2. String.search() является функцией и ее необходимо скопировать круглыми скобками (), окружающий аргументы, а не скобки [].
  3. Вы не хотите выполнять нечувствительный к регистру поиск в ваших регулярных выражениях, поэтому удалите опцию /i.
  4. Попробуйте отслеживать, произошла ли ошибка в другой переменной. Тогда, если в любом из случаев возникла ошибка, вы можете вернуть false.

Попробуйте это:

var error = false; 
var message = ''; 
if (y.length < 4) { 
    message += "Your password needs a minimum of four characters. "; 
    error = true; 
} 
if (y.search(/[a-z]/) == -1) { 
    message += "Your password needs at least one lower case letter. "; 
    error = true; 
} 
if (y.search(/[A-Z]/) == -1) { 
    message += "Your password needs at least one upper case letter. "; 
    error = true; 
} 
if (y.search (/[0-9]/) == -1) { 
    message += "Your password needs a number."; 
    error = true; 
} 
if (error) { 
    alert(message); 
    return false; 
} 
+0

Чистый UX мудрый, показывающий 4 предупреждения, если пользователь ничего не вводит, может быть немного. – h2ooooooo

+1

@ h2ooooooo Спасибо за ваш комментарий. Вы правы, что несколько предупреждений не являются хорошей стратегией для пользователей. Я обновил свой ответ, чтобы сохранить все сообщения в одной строке, а затем представить одно предупреждение, если есть хотя бы одна ошибка. – Aiias

0

основная проблема заключается в том, что вы используете «я» модификатор, то, что говорит регулярное выражение, чтобы быть чувствительны к регистру, попробуйте без этого модификатора.

Для улучшения пользовательского опыта я использую одно сообщение об ошибке, так, лет может использовать этот код:

if(/[a-z]+/.test(s) && /[A-Z]+/.test(s) && /\d+/.test(s) && s.length >= 4) 
    return true; 

alert("Your password needs Upper and lower case letters, numbers and a minimum four chars"); 
return false; 
0

Вы можете попробовать это:

var y = document.forms["loginDetails"]["password"].value; 

if (y.length < 4) { 
    alert("Password should contain minimum four characters"); 
    return false; 
} 

var pwd=/^(?=.*[a-z])/; 
var pwd1=/^(?=.*[A-Z])/; 
var pwd2=/^(?=.*[0-9])/; 

if (pwd.test(y) == false) { 
    alert("Password Should contain atleast One lowerCase letter"); 
    return false; 
} 

if (pwd1.test(y) == false) { 
    alert("Password Should contain atleast One UpperCase letter"); 
    return false; 
} 
if (pwd2.test(y) == false) { 
    alert("Password Should contain atleast One Number"); 
    return false; 
} 

Или вы могли бы сделать то же самое а также одна строка:

var pwd=/^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])/; 
if (pwd.test(y) == false) { 
    alert("Password Should contain atleast One Number, One UpperCase and a lowercase letter"); 
    return false; 
} 
Смежные вопросы