Как предусмотреть все символы из таблиц кодировок
Задача: Банкоматы допускают 4 или 6-значные ПИН-коды, а ПИН-коды не могут содержать ничего, кроме 4 цифр или 6 цифр. Если функции передана правильная строка PIN, верните true, иначе верните false.
Проблема: Нам подаются разные символы, например пробел или вот такой 9¾. Я предусмотрел в коде варианты по ASCII таблицы, а вот откуда другие символы появляются для теста не совсем понимаю. Знаю, что есть другие таблицы кодировок, но как тогда можно все варианты предусмотреть?
Код:
public static boolean validatePin(String pin) {
char[] chArray = pin.toCharArray();
for (char a = 1; a <= 47; a++) {
for (char b = 58; b < 128; b++) {
for (int i = 0; i < chArray.length; i++) {
if (chArray[i] == a || chArray[i] == b) {
return false;
}
}
}
}
if (chArray.length == 4 || chArray.length == 6) {
return true;
}
else return false;
}
Ответы (2 шт):
Автор решения: Olmicron
→ Ссылка
Pattern.compile("^\\d+$").matcher(pin).find()
UPD: Что означают символы:
- начало строки: ^
- конец строки: $
- цифровой символ: \d
- повторяется один или более раз: +
Подробнее о регулярных выражениях можно прочитать, например, здесь
Автор решения: Blacit
→ Ссылка
Конечный код, с помощью комментария получилось уменьшить.
public static boolean validatePin(String pin) {
char[] chArray = pin.toCharArray();
for (int i = 0; i < chArray.length; i++) {
if (chArray[i] <= 47 || chArray[i] >= 58) {
return false;
}
}
if (chArray.length == 4 || chArray.length == 6) {
return true;
}
else return false;
}