Skip to content

Commit 2beee93

Browse files
committed
[PRAC/cont] Correct valid logic for "search-input"
Improv handling spc/hyphens (no more 1). Excep spc's in beginning/input. Worth noting: - deleting an additional function (optimization). core: B-3 / JS-BL
1 parent 136f3fe commit 2beee93

File tree

1 file changed

+20
-100
lines changed
  • core-courses/3-js-basic-level/practicum-js-basic-level/sb-crm-client/js

1 file changed

+20
-100
lines changed

core-courses/3-js-basic-level/practicum-js-basic-level/sb-crm-client/js/index.js

Lines changed: 20 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -58,116 +58,36 @@
5858
.classList.toggle('show-search-input');
5959
});
6060

61-
// ** обновление валидационного сообщения (изменение состояния input(a))
62-
function updateFormInputValidMsg(input) {
63-
const parentNode = input.parentNode;
64-
const invalidFeed = parentNode.querySelector('.invalid-feedback');
65-
66-
if (!invalidFeed) return; // если/вдруг такое сообщение не предусмотренно для input(а)
67-
68-
input.classList.remove('is-invalid');
69-
70-
if (input.placeholder) {
71-
switch (input.placeholder) {
72-
case 'Фамилия':
73-
invalidFeed.textContent = 'Заполните поле "Фамилия"!';
74-
break;
75-
case 'Имя':
76-
invalidFeed.textContent = 'Заполните поле "Имя"!';
77-
break;
78-
case 'Отчество':
79-
invalidFeed.textContent = 'Заполните поле "Отчество"!';
80-
break;
81-
case 'Ф.И.О.':
82-
invalidFeed.textContent = 'Введите Ф.И.О.!';
83-
break;
84-
case 'Дата рождения':
85-
invalidFeed.textContent =
86-
'Укажите дату рождения, в диапазоне: от 1900 года до "текущего"!';
87-
break;
88-
case 'Год начала обучения':
89-
invalidFeed.textContent =
90-
'Укажите год начала обучения, в диапазоне: от 2000 по "текущий"!';
91-
break;
92-
case 'Год окончания обучения':
93-
invalidFeed.textContent =
94-
'Укажите год окончания обучения, в диапазоне: от 2004 по "..."!';
95-
break;
96-
case 'Факультет':
97-
invalidFeed.textContent = 'Определите факультет (не менее 3-х букв)!';
98-
break;
99-
default:
100-
invalidFeed.textContent = 'Заполните поле!';
101-
break;
102-
}
103-
}
104-
}
105-
10661
// ** организация валидации для ввода данных/фильтрационного инпута (для формы без submit)
10762
function searchFormInputValidation(input) {
108-
if (input.type === 'number') {
109-
// исключение ввода не цифр, через прослушку клавиатуры (ряд исключений)
110-
input.addEventListener('keydown', (event) => {
111-
const pressedKey = event.key;
112-
const target = event.target;
113-
const targetParentNode = target.parentNode;
114-
const invalidFeed = targetParentNode.querySelector('.invalid-feedback');
115-
116-
if (event.ctrlKey || event.altKey || event.shiftKey) {
117-
return;
118-
}
119-
120-
if (
121-
!pressedKey.match(/[0-9]/) &&
122-
![
123-
'Tab',
124-
'Backspace',
125-
'Enter',
126-
'Delete',
127-
'ArrowUp',
128-
'ArrowRight',
129-
'ArrowDown',
130-
'ArrowLeft',
131-
].includes(pressedKey)
132-
) {
133-
target.classList.add('is-invalid');
134-
invalidFeed.textContent = 'Некорректный ввод! Только цифры!';
135-
event.preventDefault();
136-
} else {
137-
target.classList.remove('is-invalid');
138-
updateFormInputValidMsg(target);
139-
}
140-
});
141-
}
142-
14363
input.addEventListener('input', (event) => {
14464
const target = event.target;
14565
const targetParentNode = target.parentNode;
14666
const invalidFeed = targetParentNode.querySelector('.invalid-feedback');
14767

148-
if (target.type === 'text') {
149-
// только русские буквы и дефис (для двойных-фамилий), без цифр/символов и необоснованных пробелов
150-
if (
151-
/[^а-яА-ЯёЁ\s-]/.test(target.value) ||
152-
/\s{2,}/.test(target.value) ||
153-
/^\s|\s$/.test(target.value)
154-
) {
155-
target.classList.add('is-invalid');
68+
// принудительное исключение пробелов (в начале строки)
69+
target.value = target.value.replace(/^\s+/, '');
70+
71+
// только русские буквы (без цифр/символов), "один" дефис (для двойных фамилий) и без необоснованных пробелов
72+
if (
73+
/[^а-яА-ЯёЁ\s-]/.test(target.value) ||
74+
(target.value.match(/-/g) || []).length > 1 ||
75+
/\s{2,}/.test(target.value)
76+
) {
77+
target.classList.add('is-invalid');
78+
79+
if (/[^а-яА-ЯёЁ\s-]/.test(target.value)) {
15680
invalidFeed.textContent =
157-
'Некорректный ввод! Измените раскладку клавиатуры и/или исключите цифры/знаки, пробелы!';
81+
'Некорректный ввод! Измените раскладку клавиатуры и/или исключите цифры/знаки!';
82+
} else if ((target.value.match(/-/g) || []).length > 1) {
83+
invalidFeed.textContent = 'Некорректный ввод! Только ОДИН дефис!';
15884
} else {
159-
target.classList.remove('is-invalid');
160-
updateFormInputValidMsg(target);
161-
}
162-
} else if (target.type === 'number') {
163-
// ограничение по длине ввода
164-
if (target.value.length > 4) {
165-
target.classList.add('is-invalid');
166-
invalidFeed.textContent = 'Некорректный ввод! Не более 4 цифр!';
167-
} else {
168-
target.classList.remove('is-invalid');
169-
updateFormInputValidMsg(target);
85+
invalidFeed.textContent =
86+
'Некорректный ввод! Только ОДИН пробел между словами!';
17087
}
88+
} else {
89+
target.classList.remove('is-invalid');
90+
invalidFeed.textContent = ''; // очистка сообщения об ошибке
17191
}
17292
});
17393
}

0 commit comments

Comments
 (0)