Skip to content

Commit 20a78df

Browse files
committed
[PRAC/cont] Fix return caret/cursor to input/st
Exclud auto return "caret" to st "mail" row-input (after data/spacebar). Worth noting: - small corrections across the entire validation function. core: B-3 / JS-BL
1 parent 533bb93 commit 20a78df

File tree

1 file changed

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

1 file changed

+65
-17
lines changed

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

Lines changed: 65 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -538,7 +538,7 @@
538538
break;
539539
}
540540

541-
// дополнительные/итоговая проверка вводимых данных (определённые условия для ввода)
541+
// дополнительные/итоговая проверки вводимых данных (согласно определённых условий для ввода/поля)
542542
if (
543543
target.value === '+' || // обязательно начало с "+"
544544
/^\+\d{1,4}\s?$/.test(target.value) || // далее "+X" или "+XXXX " (где X - код страны, 1 – 4 цифры, после пробел)
@@ -586,18 +586,72 @@
586586
''
587587
);
588588

589+
// отдельная обработка пробелов через событие "beforeinput" (попытка исключить непонятный возврат "каретки" в начало строки/инпута при вводе пробела)
590+
target.addEventListener('beforeinput', (event) => {
591+
if (event.data === ' ') {
592+
event.preventDefault(); // исключение пробелов
593+
594+
// организация сообщение об ошибке
595+
if (!target.classList.contains('is-invalid')) {
596+
errors.push('Пробелы недопустимы!');
597+
target.classList.add('is-invalid');
598+
invalidFeed.textContent = 'Пробелы недопустимы!';
599+
}
600+
// очистка сообщения об ошибке через "backspace", т.е. первичное прожатие "backspace" удаляет только сообщение "о недопустимости пробелов" и только потом присутствующие данные (буквы, цифры..)
601+
} else if (event.inputType === 'deleteContentBackward') {
602+
if (invalidFeed.textContent === 'Пробелы недопустимы!') {
603+
event.preventDefault(); // предотвращение удаления символов
604+
invalidFeed.textContent = ''; // очистка/удаление сообщения
605+
target.classList.remove('is-invalid'); // исключение НЕ валидности
606+
}
607+
}
608+
});
609+
610+
// дополнительные/итоговая проверки вводимых данных (согласно определённых условий для ввода/поля)
611+
if ((target.value.match(/-/g) || []).length > 3) {
612+
errors.push(
613+
'Адрес почты не может содержать более трёх тире!'
614+
); // исключение ввода более трёх тире
615+
target.classList.add('is-invalid');
616+
invalidFeed.textContent =
617+
'Адрес почты не может содержать более трёх тире!';
618+
}
619+
// исключение ввода более десяти нижних подчёркиваний
620+
else if ((target.value.match(/_/g) || []).length > 10) {
621+
errors.push(
622+
'Адрес почты не может содержать более десяти подчёркиваний!'
623+
);
624+
target.classList.add('is-invalid');
625+
invalidFeed.textContent =
626+
'Адрес почты не может содержать более десяти подчёркиваний!';
627+
}
628+
// исключение ввода более трёх точек
629+
else if ((target.value.match(/\./g) || []).length > 2) {
630+
errors.push(
631+
'Основная часть почты не может содержать более двух точек!'
632+
);
633+
target.classList.add('is-invalid');
634+
invalidFeed.textContent =
635+
'Основная часть почты не может содержать более двух точек!';
636+
}
637+
// определение максимальной длины
638+
else if (target.value.length > 35) {
639+
errors.push('Адрес почты должен быть не более 35 символов!');
640+
target.classList.add('is-invalid');
641+
invalidFeed.textContent =
642+
'Адрес почты должен быть не более 35 символов!';
643+
}
589644
// исключение несколько символов "@""
590-
if ((target.value.match(/@/g) || []).length > 1) {
645+
else if ((target.value.match(/@/g) || []).length > 1) {
591646
errors.push(
592647
'Почта не может содержать более одного символа "@"!'
593648
);
594649
target.classList.add('is-invalid');
595650
invalidFeed.textContent =
596651
'Почта не может содержать более одного символа "@"!';
597652
}
598-
599-
// дополнительные/итоговая проверка вводимых данных (определённые условия для ввода)
600-
if (/[а-яА-ЯёЁ]/.test(target.value)) {
653+
// только английские буквы
654+
else if (/[а-яА-ЯёЁ]/.test(target.value)) {
601655
errors.push(
602656
'Некорректный ввод! Измените раскладку клавиатуры!'
603657
);
@@ -634,21 +688,15 @@
634688
target.value.split('@')[1].split('.').length > 2) // исключение точки (второй после .com)
635689
) {
636690
errors.push(
637-
'Некорректный ввод! Исключите цифры/символы, лишние точки!'
691+
'Исключите цифры/символы, лишние точки.. после "@"!'
638692
);
639693
target.classList.add('is-invalid');
640694
invalidFeed.textContent =
641-
'Некорректный ввод! Исключите цифры/символы, лишние точки!';
695+
'Исключите цифры/символы, лишние точки.. после "@"!';
642696
} else if (!/\.[a-zA-Z]{2,}$/.test(target.value)) {
643697
invalidFeed.textContent = '';
644698
target.classList.remove('is-invalid');
645699
}
646-
// исключение пробелов
647-
else if (/\s/.test(target.value)) {
648-
errors.push('Пробелы в почте не допускаются!');
649-
target.classList.add('is-invalid');
650-
invalidFeed.textContent = 'Пробелы в почте не допускаются!';
651-
}
652700
// итоговая проверка на вводимый формат
653701
else if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(target.value)) {
654702
errors.push(
@@ -673,7 +721,7 @@
673721
break;
674722
}
675723

676-
// ряд проверок для вводимых данных (определённые условия для ввода)
724+
// дополнительные проверки вводимых данных (согласно определённых условий для ввода/поля)
677725
if (/\s/.test(target.value)) {
678726
errors.push('Пробелы недопустимы!'); // исключение пробелов
679727
target.classList.add('is-invalid');
@@ -741,7 +789,7 @@
741789
break;
742790
}
743791

744-
// ряд проверок для вводимых данных (определённые условия для ввода)
792+
// дополнительные проверки вводимых данных (согласно определённых условий для ввода/поля)
745793
if (/\s/.test(target.value)) {
746794
errors.push('Пробелы недопустимы!'); // исключение пробелов
747795
target.classList.add('is-invalid');
@@ -815,7 +863,7 @@
815863
break;
816864
}
817865

818-
// ряд проверок для вводимых данных (определённые условия для ввода)
866+
// дополнительные проверки вводимых данных (согласно определённых условий для ввода/поля)
819867
if (/\s/.test(target.value)) {
820868
errors.push('Пробелы недопустимы!'); // исключение пробелов
821869
target.classList.add('is-invalid');
@@ -897,7 +945,7 @@
897945
break;
898946
}
899947

900-
// ряд проверок для вводимых данных (определённые условия для ввода)
948+
// дополнительные проверки вводимых данных (согласно определённых условий для ввода/поля)
901949
if ((target.value.match(/\s/g) || []).length > 1) {
902950
errors.push('Только ОДИН пробел допустим!');
903951
target.classList.add('is-invalid');

0 commit comments

Comments
 (0)