Как обрабатывать особые случаи при проверке формы Angular?

У меня есть поле телефона, где допустимы два формата — «123-456-7890» и «+01 123-456-7890». У меня есть шаблон для обработки второго случая Validators.pattern(/(\+\d{2})?\d{3}[\-]?\d{3}[\-]?\d{4}/), но как сделать так, чтобы первый случай тоже был приемлемым? Насколько я могу судить из документации, валидаторы поддерживают только && условия, но не || условия. Я что-то упускаю?

Кроме того, я хотел бы, чтобы поле стало красным, когда в него вводятся данные, если они еще не соответствуют критериям проверки, и не раздражать пользователя всплывающими окнами по пути. Затем, когда он покидает поле, оно остается красным. Только тогда, когда форма отправлена, она перечисляет все поля, которые неверны. Есть ли способ сделать это?

Используйте пользовательский ValidatorFn. Взгляните на пример Forbidden Hero Name в угловые документы.

Lapskaus 18.03.2022 16:04
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
1
26
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Обновление регулярного выражения до /^(\+?\d{2}\s)?\d{3}[\-]?\d{3}[\-]?\d{4}$/ будет работать, и если вы хотите, чтобы пробел был необязательным после кода страны, используйте это /^(\+?\d{2}\s?)?\d{3}[\-]?\d{3}[\-]?\d{4}$/.

Действительно, сработало! Благодарю вас! Я получаю 2,3,3,4 цифры. Я не понимаю, как он может обрабатывать оба шаблона одновременно. Вы можете объяснить?

user3217883 18.03.2022 20:43

Я получаю цифры 2,3,3,4 и вижу, как он может обрабатывать оба шаблона одновременно. Для чего нужны ^ в начале и $ в конце? Кроме того, необязательное пространство, похоже, не работает во втором формате. Это не удается, если пробел включен.

user3217883 18.03.2022 20:59
^ значит надо начинать с. $ означает, что должно заканчиваться на. ? означает ноль или единицу. \s означает пробел. Добавление ? к \s, то есть \s?, означает, что разрешено ноль или один пробел. \d означает любую цифру. {x, y} означает минимум x символов и максимум y символов, вы можете указать любой из них. Например, {,4} означает максимум 4 символа. {4} означает, что должно быть 4 символа, а {4,} означает не менее 4 символов. Надеюсь, это может быть полезно для вас.
Justwell Solets 27.03.2022 03:12

Другие вопросы по теме