@Quintis

Как узнать почему функция не проходит тест?

function validate(password) {
  return /[a-z]/.test(password) && /[0-9]/.test(password)&& /[A-Z]/.test(password)&& /\w{6}/.test(password) ;
}


https://www.codewars.com/kata/52e1476c8147a7547a00...

Когда запускаю Attempt выбивает ошибку :
Time: 898ms Passed: 17 Failed: 1 Exit Code: 1

You need to write regex that will validate a password to make sure it meets the following criteria:

At least six characters long
contains a lowercase letter
contains an uppercase letter
contains a number
Valid passwords will only be alphanumeric characters.
  • Вопрос задан
  • 270 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
/\w{6}/.test(password)

Нет, это не

At least six characters long

Это просто шесть символов подряд, до и после них может быть что угодно, в том числе и не требуемые alphanumeric. Поэтому: надо указать, что проверяется вся строка целиком (^ - начало строки, $ - конец); символов может быть больше шести (квантификатор {} позволяет указывать диапазон значений, верхнюю границу оставляем открытой). Т.е., правильно будет так:

/^\w{6,}$/.test(password)

UPD. \w - не alphanumeric, это ещё и _, так что придётся перечислить нужные символы в более явном виде. Кроме того, вместо четырёх отдельных выражений можно сделать одно:

/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{6,}$/.test(password)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Сначала нужно узнать на какой строке затыкается проверка. Надо перед ретурном поставить вывод в консоль. Вот так:
function validate(password) {
console.log(password);
return /[a-z]/.test(password) && /[0-9]/.test(password)&& /[A-Z]/.test(password)&& /\w{6}/.test(password) ;
}

Выясняется, что затык на строке "fjd3IR9.;" - обрати внимание, что последнее условие " /\w{6}/" - это в переводе на понятный "возврати true если в строке увидишь 6 символов подряд", поэтому для этой строки это TRUE.

\w («w»: от английского «word» – «слово»)
Символ «слова», а точнее – буква латинского алфавита или цифра или подчёркивание _. Нелатинские буквы не являются частью класса \w, то есть буква русского алфавита не подходит.


А теперь обрати внимание, что в условиях каты в самом низу есть
Valid passwords will only be alphanumeric characters.
т.е. символы только алфавитно-цифровые. В примере выше есть точка и точка с запятой, а раз они есть, то должно вернуть FALSE.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы