I´m trying to only allow numbers and points on a text form field.
I have something like that
WhitelistingTextInputFormatter(RegExp("\d*[.]\d*"))
But does not work, so: Anybody have idea how can only allow digits and point?
For the validation, we want the users of our app to fill in the correct details in each of these fields. The logic will be defined as such: First, for the name field, we want the user to enter a valid first name and last name, which can be accompanied by initials.
Since WhitelistingTextInputFormatter
is deprecated in Flutter as of 1.20, FilteringTextInputFormatter
can be used:
A TextInputFormatter that prevents the insertion of characters matching (or not matching) a particular pattern.
Instances of filtered characters found in the new TextEditingValues will be replaced with the replacementString which defaults to the empty string.
Since this formatter only removes characters from the text, it attempts to preserve the existing TextEditingValue.selection to values it would now fall at with the removed characters.
Example use:
TextField(
keyboardType: TextInputType.numberWithOptions(decimal: true),
inputFormatters: <TextInputFormatter>[
FilteringTextInputFormatter.allow(RegExp(r'^\d+(?:\.\d+)?$')),
],
),
Legacy answer
WhitelistingTextInputFormatter
"creates a formatter that allows only the insertion of whitelisted characters patterns". It means your pattern should just match any 1 digit or 1 dot.
Also, you need to use a raw string literal if you want to use a single backslash with regex escapes.
Use
WhitelistingTextInputFormatter(RegExp(r"[\d.]"))
Note that if you want to validate the whole input sequence you need to define a validator: validateMyInput
and then add
String validateMyInput(String value) {
Pattern pattern = r'^\d+(?:\.\d+)?$';
RegExp regex = new RegExp(pattern);
if (!regex.hasMatch(value))
return 'Enter Valid Number';
else
return null;
}
Adapted from Form Validation in Flutter.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With