Wie kann man nur 2 Ziffern und 1 Ziffer nach dem Komma (.) Zulassen?
Ich habe das Problem, dass ich nicht das Richtige RegExp
zusammenbringen kann. Mein Ziel ist es, bis zu 3 Stellen vor dem Komma zuzulassen, und NUR WENN eine Dezimalstelle vorhanden ist, dann 1 Stelle nach dem Komma. Welche RegExp
oder Regexes muss ich für dieses Verhalten verwenden?
Gewünschte erlaubte Ergebnisse: 000.0, 00.0, 0.0, 000, 00, 0
das ist der aktuelle Code, aber das Problem ist, dass auch hier 4 Stellen ohne Dezimalstelle gesetzt werden können:
inputFormatters: [
FilteringTextInputFormatter.allow(RegExp(r'^\d{1,3}\.?\d{0,1}')),
],
Ich habe diese bereits durchgeblättert, aber sie funktionieren bei mir nicht:
Javascript Regex erlaubt nur 2-stellige Zahlen und 3-stellige Zahlen als Komma getrennt
Javascript-Regex, der nur mit bis zu 11 Ziffern, einem Komma und 2 Ziffern danach übereinstimmt
Jquery erlaubt nur 2 Ziffern vor und nach dem Punkt
Flattern - Regex in TextFormField
Nur zwei Dezimalzahlen in der Flattereingabe zulassen?
Antworten
Ich bin kein Regex-Experte, daher kann ich Ihnen nur empfehlen, diese Hilfsfunktion zu verwenden:
bool match(String input) {
if (input.split('.').length == 1) {
// if there is no dot in the string
// returns true if the length is < 4
return (input.length < 4) ? true : false;
} else if (input.split('.').length > 1){
// if there is more than one dot in the string
return false;
} else {
// if there is a dot in the string
// returns true if there are < 4 digits before the dot and exactly 1 digit
// after the dot
return (input.split('.')[0].length < 4 && input.split('.')[1].length == 1)
? true
: false;
}
}
RegExp(r'^\d{0,3}(\.\d{1})?$')
Versuchen Sie diesen regulären Ausdruck
Ich denke auch durch Komma Ihre mittlere Dezimalstelle (.) und wenn Sie 3 Stellen vor der Dezimalstelle und 1 Dezimalstelle nach der Dezimalstelle wollen
TextFormField(
autoValidateMode: AutoValidateMode.always,
validator: (value) {
return RegExp(r'^\d{0,3}(\.\d{1})?$').hasMatch(value) ? null : 'Invalid value';
},
)
Eingangsformatierer ist hier nicht der Fall , da es formatiert Daten visuell und Ihre gewünschten Formate enthalten sie. Sie sollten TextFormField
und validator
Eigenschaft mit @ Andrej Validator verwenden oder verwenden RegExp
.
TextFormField(
autoValidateMode: AutoValidateMode.always,
validator: (value) {
return RegEx(r'^\d{1,3}(\.\d)?$').hasMatch(value) ? null : 'Invalid value';
},
)
RegExp arbeitet hier .