Короткий вариант функции
function correctPin (pin) {
if (!isNaN(pin) && Number.isInteger(pin) && pin.toString().length == 4 || pin.toString().length == 6) {
return true
} else {
return false
}
}
console.log(correctPin (2323));
Как написать более короткий вариант данной функции?
Ответы (2 шт):
Автор решения: Проста Miha
→ Ссылка
Может так короче?)
И ещё у вас была ошибка, что если пинкод имеет ровно 6 чисел то он проходит дпльше и не проверялся на isInteger ^-^
function correctPin(pin) {
return Number.isInteger(pin) && (pin.toString().length == 4 || pin.toString().length == 6) ? true : false
}
console.log(2323, correctPin(2323));
console.log(23223, correctPin(23223));
console.log('2323', correctPin('2323'));
console.log('22s323', correctPin('22s323'));
Автор решения: Stanislav Volodarskiy
→ Ссылка
Начнём с того что pin не может быть числом. '0123' совершенно корректный пин, но его нельзя представить в виде числа. Даже если вы скажете что нули можно добавить слева если пин короткий, это не решит проблему: тогда вы не различите пины '000123' и '0123'.
Работать надо со строками из цифр длиной четыре или шесть. Регулярное выражение подходит идеально:
function correctPin(pin) {
return /^(\d{4}|\d{6})$/.test(pin);
}
for (const s of ['0123', '000123', '123', '12345', '1234567', '12b3']) {
console.log(s, correctPin(s));
}
$ node correctPin.js 0123 true 000123 true 123 false 12345 false 1234567 false 12b3 false