Reputation: 1076
I want to allow this kind of input to my text field:
123
*123#
*123*4#
so I created and tested RegExr
website this regex:
\**\d+\**\d+\#?
but when i try to type nothing is typed in the text field
code of using:
...
keyboardType = TextInputType.phone;
// to allow digits with asterik and hash
final regex = RegExp(r'\**\d+\**\d+\#?');
inputFormatters = [FilteringTextInputFormatter.allow(regex)];
return TextField(
...
keyboardType: keyboardType,
inputFormatters: inputFormatters,
);
Upvotes: 2
Views: 1220
Reputation: 163217
If you also want to match a variation with a single digit like *1#
you might use a negative lookahead excluding what can not be present:
^(?!.*\*[*#]|\d*#$)[*\d]*#?$
Explanation
^
Start of string(?!
Negative lookahead, assert what to the right is not
.*\*[*#]
Match either **
or *#
|
Or\d*#$
Match optional digits and #
at the end of the string)
Close lookahead[*\d]*#?
Match optional *
chars or digits and optional #
$
End of stringSee a regex demo.
Upvotes: 1
Reputation: 626738
You can use
^\*?(?:\d+\*?(?:\d+#?)?)?$
See the regex demo.
Details:
^
- start of string\*?
- an optional *
char(?:\d+\*?(?:\d+#?)?)?
- an optional sequence of
\d+
- one or more digits\*?
- an optional *
(?:\d+#?)?
- an optional sequence of one or more digits and an optional #
char$
- end of string.Upvotes: 1