|
538 | 538 | break; |
539 | 539 | } |
540 | 540 |
|
541 | | - // дополнительные/итоговая проверка вводимых данных (определённые условия для ввода) |
| 541 | + // дополнительные/итоговая проверки вводимых данных (согласно определённых условий для ввода/поля) |
542 | 542 | if ( |
543 | 543 | target.value === '+' || // обязательно начало с "+" |
544 | 544 | /^\+\d{1,4}\s?$/.test(target.value) || // далее "+X" или "+XXXX " (где X - код страны, 1 – 4 цифры, после пробел) |
|
586 | 586 | '' |
587 | 587 | ); |
588 | 588 |
|
| 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 | + } |
589 | 644 | // исключение несколько символов "@"" |
590 | | - if ((target.value.match(/@/g) || []).length > 1) { |
| 645 | + else if ((target.value.match(/@/g) || []).length > 1) { |
591 | 646 | errors.push( |
592 | 647 | 'Почта не может содержать более одного символа "@"!' |
593 | 648 | ); |
594 | 649 | target.classList.add('is-invalid'); |
595 | 650 | invalidFeed.textContent = |
596 | 651 | 'Почта не может содержать более одного символа "@"!'; |
597 | 652 | } |
598 | | - |
599 | | - // дополнительные/итоговая проверка вводимых данных (определённые условия для ввода) |
600 | | - if (/[а-яА-ЯёЁ]/.test(target.value)) { |
| 653 | + // только английские буквы |
| 654 | + else if (/[а-яА-ЯёЁ]/.test(target.value)) { |
601 | 655 | errors.push( |
602 | 656 | 'Некорректный ввод! Измените раскладку клавиатуры!' |
603 | 657 | ); |
|
634 | 688 | target.value.split('@')[1].split('.').length > 2) // исключение точки (второй после .com) |
635 | 689 | ) { |
636 | 690 | errors.push( |
637 | | - 'Некорректный ввод! Исключите цифры/символы, лишние точки!' |
| 691 | + 'Исключите цифры/символы, лишние точки.. после "@"!' |
638 | 692 | ); |
639 | 693 | target.classList.add('is-invalid'); |
640 | 694 | invalidFeed.textContent = |
641 | | - 'Некорректный ввод! Исключите цифры/символы, лишние точки!'; |
| 695 | + 'Исключите цифры/символы, лишние точки.. после "@"!'; |
642 | 696 | } else if (!/\.[a-zA-Z]{2,}$/.test(target.value)) { |
643 | 697 | invalidFeed.textContent = ''; |
644 | 698 | target.classList.remove('is-invalid'); |
645 | 699 | } |
646 | | - // исключение пробелов |
647 | | - else if (/\s/.test(target.value)) { |
648 | | - errors.push('Пробелы в почте не допускаются!'); |
649 | | - target.classList.add('is-invalid'); |
650 | | - invalidFeed.textContent = 'Пробелы в почте не допускаются!'; |
651 | | - } |
652 | 700 | // итоговая проверка на вводимый формат |
653 | 701 | else if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(target.value)) { |
654 | 702 | errors.push( |
|
673 | 721 | break; |
674 | 722 | } |
675 | 723 |
|
676 | | - // ряд проверок для вводимых данных (определённые условия для ввода) |
| 724 | + // дополнительные проверки вводимых данных (согласно определённых условий для ввода/поля) |
677 | 725 | if (/\s/.test(target.value)) { |
678 | 726 | errors.push('Пробелы недопустимы!'); // исключение пробелов |
679 | 727 | target.classList.add('is-invalid'); |
|
741 | 789 | break; |
742 | 790 | } |
743 | 791 |
|
744 | | - // ряд проверок для вводимых данных (определённые условия для ввода) |
| 792 | + // дополнительные проверки вводимых данных (согласно определённых условий для ввода/поля) |
745 | 793 | if (/\s/.test(target.value)) { |
746 | 794 | errors.push('Пробелы недопустимы!'); // исключение пробелов |
747 | 795 | target.classList.add('is-invalid'); |
|
815 | 863 | break; |
816 | 864 | } |
817 | 865 |
|
818 | | - // ряд проверок для вводимых данных (определённые условия для ввода) |
| 866 | + // дополнительные проверки вводимых данных (согласно определённых условий для ввода/поля) |
819 | 867 | if (/\s/.test(target.value)) { |
820 | 868 | errors.push('Пробелы недопустимы!'); // исключение пробелов |
821 | 869 | target.classList.add('is-invalid'); |
|
897 | 945 | break; |
898 | 946 | } |
899 | 947 |
|
900 | | - // ряд проверок для вводимых данных (определённые условия для ввода) |
| 948 | + // дополнительные проверки вводимых данных (согласно определённых условий для ввода/поля) |
901 | 949 | if ((target.value.match(/\s/g) || []).length > 1) { |
902 | 950 | errors.push('Только ОДИН пробел допустим!'); |
903 | 951 | target.classList.add('is-invalid'); |
|
0 commit comments