У меня есть следующий модуль форматирования ввода на моем TextField
inputFormatters: [
FilteringTextInputFormatter.allow(
RegExp(r'^\+[0-9]+'),
),
],
И это не позволяет мне набирать + в начале номера телефона. Поэтому я решил проверить это в dartpad.
void main() {
final regex = RegExp(r'^\+[0-9]+');
print(regex.hasMatch('+310612345678'));
}
Что выводит true. Что я делаю не так?
Я хочу, чтобы знак плюса был разрешен только в начале. Далее цифры. Кажется, он работает в dartpad, но, как ни странно, не как средство форматирования ввода.
Ах... вы узнали, почему самые сложные фильтры обречены на провал.
Подумайте об этом так... чтобы набрать "+123", вы должны сначала набрать "+". Но "+" не разрешен вашим фильтром! И даже если бы это было так, это означало бы, что вы также можете отправить только «+»!
Таким образом, решением было бы вместо этого поставить это как регулярное выражение проверки. Если вы настаиваете, вы можете запускать проверку валидации для каждого изменения, а не для отправки, что даст вам ошибку на пустой строке или +, но позволит вам в конечном итоге ввести +123 как действительное.
Если вы хотите разрешить ввод знака +, вы можете изменить регулярное выражение на ^[+0-9]+. Этот шаблон регулярного выражения указывает, что ввод должен начинаться либо с +, либо с цифры, за которой следует одна или несколько цифр. Вот обновленный код:
inputFormatters: [
FilteringTextInputFormatter.allow(
RegExp(r'^[\+0-9]+'),
),
],
В этом формате поле ввода позволяет использовать знак + и цифры и блокировать любые другие символы.
Вы хотите разрешить номер телефона и знак плюс?