Wie kann man nur 2 Ziffern und 1 Ziffer nach dem Komma (.) Zulassen?

Nov 21 2020

Ich habe das Problem, dass ich nicht das Richtige RegExpzusammenbringen 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 RegExpoder 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

1 Andrej Nov 21 2020 at 21:33

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;
    }
  }
2 AkshitOstwal Nov 21 2020 at 21:27
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';
  },
)
1 BambinoUA Nov 22 2020 at 09:26

Eingangsformatierer ist hier nicht der Fall , da es formatiert Daten visuell und Ihre gewünschten Formate enthalten sie. Sie sollten TextFormFieldund validatorEigenschaft 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 .