@dualdeazz

Почему не работает код Regex validate PIN code?

При заданном пин коде нужно выводить true, если пинкод состоит только из чисел, а также имеет длину 4 или 6 символов, и false если что-то из этого не подходит, написал код, но не работает, подскажите, что не так?

function validatePIN (pin) {
  let arr = pin.split('');
  arr.forEach(i => {
    if (typeof arr[i] === 'number' & arr.length === 4 || 6)
      {
        return true
      }
   else{
      return false
    }
  });

}
  • Вопрос задан
  • 124 просмотра
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Всё не так.
split разбивает строку и результатом будет массив строк. Соответственно, условие typeof arr[i] === 'number' никогда не выполнится.
Условие записано неверно и всегда будет давать true.
typeof arr[i] === 'number' & arr.length === 4 || 6эквивалентно
((typeof arr[i] === 'number') & (arr.length === 4)) || 6

& - это не логическое И, а побитовое.
forEach у вас смысла не имеет, так как он не использует значение, возвращаемое из каллбэк-функции.
В основной функции нет return'а, значит она всегда возвращает undefined.
Ну и regex'а тут нет.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Kentavr16
@Kentavr16
long cold winter
Метод split кажется должен вернуть тебе массив строк. Поэтому проверка ===number не срабатывает. Приведи arr[i] к числу. Number(arr[i]). А потом делай манипуляции. Но проще было бы валидировать регулярным выражением.
Ответ написан
Комментировать
@WAR_VIK
Вот так можно сделать:
let print = s => console.log(s);
let str = '1283';
let res = /(\b\d{4}\b)|(\b\d{6}\b)/g.test(str);
print(res);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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