Средство форматирования ввода не допускает значение, когда оно должно

У меня есть следующий модуль форматирования ввода на моем TextField

 inputFormatters: [
     FilteringTextInputFormatter.allow(
         RegExp(r'^\+[0-9]+'),
     ),
 ],

И это не позволяет мне набирать + в начале номера телефона. Поэтому я решил проверить это в dartpad.

void main() {
  final regex = RegExp(r'^\+[0-9]+');
  print(regex.hasMatch('+310612345678'));
}

Что выводит true. Что я делаю не так?

Вы хотите разрешить номер телефона и знак плюс?

Hitarth Chhunchha 09.02.2023 05:40

Я хочу, чтобы знак плюса был разрешен только в начале. Далее цифры. Кажется, он работает в dartpad, но, как ни странно, не как средство форматирования ввода.

anonymous-dev 09.02.2023 05:42
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
51
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Ах... вы узнали, почему самые сложные фильтры обречены на провал.

Подумайте об этом так... чтобы набрать "+123", вы должны сначала набрать "+". Но "+" не разрешен вашим фильтром! И даже если бы это было так, это означало бы, что вы также можете отправить только «+»!

Таким образом, решением было бы вместо этого поставить это как регулярное выражение проверки. Если вы настаиваете, вы можете запускать проверку валидации для каждого изменения, а не для отправки, что даст вам ошибку на пустой строке или +, но позволит вам в конечном итоге ввести +123 как действительное.

Если вы хотите разрешить ввод знака +, вы можете изменить регулярное выражение на ^[+0-9]+. Этот шаблон регулярного выражения указывает, что ввод должен начинаться либо с +, либо с цифры, за которой следует одна или несколько цифр. Вот обновленный код:

inputFormatters: [
 FilteringTextInputFormatter.allow(
     RegExp(r'^[\+0-9]+'),
 ),

],

В этом формате поле ввода позволяет использовать знак + и цифры и блокировать любые другие символы.

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

Похожие вопросы

Удалите все строки между двумя строками с определенными шаблонами с помощью однострочного Perl и регулярных выражений
Перейти к регулярным выражениям или кешированию — что быстрее в долгосрочной перспективе?
Добавьте логическое значение функции года и замените трехбуквенный месяц на его номер месяца в массиве строк
Сопоставление шаблонов регулярных выражений с использованием аннотации @Pattern в Spring Boot
Выполнять несколько операций регулярных выражений в каждой строке текстового файла и сохранять извлеченные данные в соответствующем столбце
Как проверить, принадлежит ли дата, указанная в виде строки, к интервалу из 2 дат, указанных в другой строке?
Замаскируйте любой 15-значный или 16-значный номер кредитной карты в строке, заменив на X, кроме последних 4 цифр. Сложная головоломка с регулярными выражениями в C#
Сопоставьте "MALE", но не "FEMALE" в SQL
Как регулярное выражение соответствует полному имени, например Linkedin
Как добавить два дефиса в выражение RegEx?