|
576 | 576 | break; |
577 | 577 | } |
578 | 578 |
|
| 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 | + |
579 | 595 | // дополнительные/итоговая проверка вводимых данных (определённые условия для ввода) |
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)) { |
586 | 613 | invalidFeed.textContent = ''; |
587 | 614 | target.classList.remove('is-invalid'); |
588 | 615 | } |
589 | | - // Проверка на пробелы |
590 | | - else if (/\s/.test(target.value)) { |
591 | | - errors.push('Пробелы в почте не допускаются.'); |
| 616 | + // исключение ввода ряда символов перед "@" |
| 617 | + else if (/[-_.]@/.test(target.value)) { |
| 618 | + errors.push( |
| 619 | + 'Следующие символы ". - _" не могут стоять перед "@"!' |
| 620 | + ); |
592 | 621 | target.classList.add('is-invalid'); |
593 | | - invalidFeed.textContent = 'Пробелы в почте не допускаются.'; |
| 622 | + invalidFeed.textContent = |
| 623 | + 'Следующие символы ". - _" не могут стоять перед "@"!'; |
594 | 624 | } |
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 | + ); |
598 | 635 | target.classList.add('is-invalid'); |
599 | 636 | invalidFeed.textContent = |
600 | | - 'Почта должна начинаться с буквы или цифры.'; |
| 637 | + 'Некорректный ввод! Исключите цифры/символы, лишние точки!'; |
| 638 | + } else if (!/\.[a-zA-Z]{2,}$/.test(target.value)) { |
| 639 | + invalidFeed.textContent = ''; |
| 640 | + target.classList.remove('is-invalid'); |
601 | 641 | } |
602 | | - // Проверка, что почта не заканчивается на цифру |
603 | | - else if (/\d$/.test(target.value)) { |
604 | | - errors.push('Почта не может заканчиваться на цифру.'); |
| 642 | + // исключение пробелов |
| 643 | + else if (/\s/.test(target.value)) { |
| 644 | + errors.push('Пробелы в почте не допускаются!'); |
605 | 645 | target.classList.add('is-invalid'); |
606 | | - invalidFeed.textContent = |
607 | | - 'Почта не может заканчиваться на цифру.'; |
| 646 | + invalidFeed.textContent = 'Пробелы в почте не допускаются!'; |
608 | 647 | } |
609 | | - // Итоговая проверка формата email |
| 648 | + // итоговая проверка на вводимый формат |
610 | 649 | else if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(target.value)) { |
611 | 650 | errors.push( |
612 | | - 'Введите корректную почту, например: example123@gmail.com.' |
| 651 | + 'Введите корректную почту, например: example_123@gmail.com' |
613 | 652 | ); |
614 | 653 | target.classList.add('is-invalid'); |
615 | 654 | invalidFeed.textContent = |
616 | | - 'Введите корректную почту, например: example123@gmail.com.'; |
| 655 | + 'Введите корректную почту, например: example_123@gmail.com'; |
617 | 656 | } |
618 | | - // Если все проверки пройдены |
| 657 | + // если всё корректно (сообщений нет) |
619 | 658 | else { |
620 | 659 | invalidFeed.textContent = ''; |
621 | 660 | target.classList.remove('is-invalid'); |
|
767 | 806 | }); |
768 | 807 | }); |
769 | 808 |
|
770 | | - // ** организация принудительного удаления атрибута aria-hidden="true" с Bootstrap-модального окна (исключение ошибки с ARIA) |
| 809 | + // ** организация принудительного удаления атрибута aria-hidden="true" с add-модального окна (исключение ошибки с ARIA) |
771 | 810 | const addModal = document.querySelector('.crm__add-btn-modal'); |
772 | 811 |
|
773 | 812 | // мониторинг/ожидание появления соответствующего атрибута |
|
0 commit comments