Skip to content

Commit d2faf1f

Browse files
committed
[PRAC/cont] Add validation rules for email/inputs
Organize validation rules/conditions for email/inputs from contact-row. Worth noting: - block/code sizes needed for customization, for more/less acceptable validation. core: B-3 / JS-BL
1 parent 74a7b3e commit d2faf1f

File tree

1 file changed

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

1 file changed

+63
-24
lines changed

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

Lines changed: 63 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -576,46 +576,85 @@
576576
break;
577577
}
578578

579+
// исключение недопустимых символов (вообще)
580+
target.value = target.value.replace(
581+
/[=+,!?%#$^&:{}()<>|"'*/\\]/g,
582+
''
583+
);
584+
585+
// исключение несколько символов "@""
586+
if ((target.value.match(/@/g) || []).length > 1) {
587+
errors.push(
588+
'Почта не может содержать более одного символа "@"!'
589+
);
590+
target.classList.add('is-invalid');
591+
invalidFeed.textContent =
592+
'Почта не может содержать более одного символа "@"!';
593+
}
594+
579595
// дополнительные/итоговая проверка вводимых данных (определённые условия для ввода)
580-
if (
581-
/^[a-zA-Z0-9]+$/.test(target.value) || // начало, только с букв или цифр
582-
/^[a-zA-Z0-9]+@$/.test(target.value) || // буквы/цифры и символ @
583-
/^[a-zA-Z0-9]+@[a-zA-Z0-9]+$/.test(target.value) || // Буквы/цифры перед и после @
584-
/^[a-zA-Z0-9]+@[a-zA-Z0-9]+\.$/.test(target.value) // Частично введенный домен с точкой
585-
) {
596+
if (/[а-яА-ЯёЁ]/.test(target.value)) {
597+
errors.push(
598+
'Некорректный ввод! Измените раскладку клавиатуры!'
599+
);
600+
target.classList.add('is-invalid');
601+
invalidFeed.textContent =
602+
'Некорректный ввод! Измените раскладку клавиатуры!';
603+
}
604+
// исключение ввода точки, дефиса и подчёркивания (в начале строки)
605+
else if (/^[._-]/.test(target.value)) {
606+
errors.push(
607+
'Почта не может начинаться с точки, дефиса или подчёркивания!'
608+
);
609+
target.classList.add('is-invalid');
610+
invalidFeed.textContent =
611+
'Почта не может начинаться с точки, дефиса или подчёркивания!';
612+
} else if (!/@/.test(target.value)) {
586613
invalidFeed.textContent = '';
587614
target.classList.remove('is-invalid');
588615
}
589-
// Проверка на пробелы
590-
else if (/\s/.test(target.value)) {
591-
errors.push('Пробелы в почте не допускаются.');
616+
// исключение ввода ряда символов перед "@"
617+
else if (/[-_.]@/.test(target.value)) {
618+
errors.push(
619+
'Следующие символы ". - _" не могут стоять перед "@"!'
620+
);
592621
target.classList.add('is-invalid');
593-
invalidFeed.textContent = 'Пробелы в почте не допускаются.';
622+
invalidFeed.textContent =
623+
'Следующие символы ". - _" не могут стоять перед "@"!';
594624
}
595-
// Проверка, что почта начинается с буквы или цифры
596-
else if (!/^[a-zA-Z0-9]/.test(target.value)) {
597-
errors.push('Почта должна начинаться с буквы или цифры.');
625+
// корректировка возможного ввода после "@", в конце строки (ряд исключений)
626+
else if (
627+
(/[._-]$/.test(target.value) && !/\.$/.test(target.value)) || // дефис и подчёркивание
628+
/\d$/.test(target.value) || // цифры
629+
(target.value.includes('@') &&
630+
target.value.split('@')[1].split('.').length > 2) // исключение точки (второй после .com)
631+
) {
632+
errors.push(
633+
'Некорректный ввод! Исключите цифры/символы, лишние точки!'
634+
);
598635
target.classList.add('is-invalid');
599636
invalidFeed.textContent =
600-
'Почта должна начинаться с буквы или цифры.';
637+
'Некорректный ввод! Исключите цифры/символы, лишние точки!';
638+
} else if (!/\.[a-zA-Z]{2,}$/.test(target.value)) {
639+
invalidFeed.textContent = '';
640+
target.classList.remove('is-invalid');
601641
}
602-
// Проверка, что почта не заканчивается на цифру
603-
else if (/\d$/.test(target.value)) {
604-
errors.push('Почта не может заканчиваться на цифру.');
642+
// исключение пробелов
643+
else if (/\s/.test(target.value)) {
644+
errors.push('Пробелы в почте не допускаются!');
605645
target.classList.add('is-invalid');
606-
invalidFeed.textContent =
607-
'Почта не может заканчиваться на цифру.';
646+
invalidFeed.textContent = 'Пробелы в почте не допускаются!';
608647
}
609-
// Итоговая проверка формата email
648+
// итоговая проверка на вводимый формат
610649
else if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(target.value)) {
611650
errors.push(
612-
'Введите корректную почту, например: example123@gmail.com.'
651+
'Введите корректную почту, например: example_123@gmail.com'
613652
);
614653
target.classList.add('is-invalid');
615654
invalidFeed.textContent =
616-
'Введите корректную почту, например: example123@gmail.com.';
655+
'Введите корректную почту, например: example_123@gmail.com';
617656
}
618-
// Если все проверки пройдены
657+
// если всё корректно (сообщений нет)
619658
else {
620659
invalidFeed.textContent = '';
621660
target.classList.remove('is-invalid');
@@ -767,7 +806,7 @@
767806
});
768807
});
769808

770-
// ** организация принудительного удаления атрибута aria-hidden="true" с Bootstrap-модального окна (исключение ошибки с ARIA)
809+
// ** организация принудительного удаления атрибута aria-hidden="true" с add-модального окна (исключение ошибки с ARIA)
771810
const addModal = document.querySelector('.crm__add-btn-modal');
772811

773812
// мониторинг/ожидание появления соответствующего атрибута

0 commit comments

Comments
 (0)