Ограничить ввод специальных символов - PullRequest
0 голосов
/ 21 мая 2018

У меня есть TextField, который будет принимать только цифры в качестве входных данных.Появляющаяся клавиатура позволяет вводить следующие символы: «- (дефис), (запятая). (Точка) и пробел».Как я могу запретить пользователю вводить все, кроме периода.

child: new TextField(
  controller: _controller,
  maxLengthEnforced: true,
  keyboardType: TextInputType.number,
  maxLength: 4, //9999 upper limit
  ), //TextField

Я пытался использовать RegExp, чтобы взять текст _controller, удалить символы и поместить его обратно в поле без удачи.

...//Add Listener to _controller
_controller.addListener(restrictCharacters);
...

//Listener
void restrictCharacters(){
  RegExp regexp = new RegExp(
    r"^|\-|\,|\ ",
    caseSensitive: false,
    multiLine: false,);
  String text = _controller.text;
  String chng = text.replaceaLL(regExp,"");
  _controller.text = chng;
}

При применении курсор перемещаетсяк началу, и поле содержит - (дефис), например.

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Для тех, кому нужно работать с денежным форматом в текстовых полях:

Для использования только: , (запятая) и . (точка)

и заблокируйте символ: - (дефис, минус или тире)

, а также: (пробел)

В вашем TextField просто установите следующий код:

keyboardType: TextInputType.numberWithOptions(decimal: true),
inputFormatters: [BlacklistingTextInputFormatter(new RegExp('[\\-|\\ ]'))],

Символы дефис и пробел по-прежнему будут отображаться вклавиатуры, но заблокируется.

0 голосов
/ 21 мая 2018

Добавьте BlacklistingTextInputFormatter к вашему TextField.

  inputFormatters: [
    new BlacklistingTextInputFormatter(new RegExp('[\\.]')),
  ],

, удаляет только . Если вы хотите запретить, скажем, . и , измените его на

  inputFormatters: [
    new BlacklistingTextInputFormatter(new RegExp('[\\.|\\,]')),
  ],
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...