Comment autoriser seulement 2 chiffres et 1 chiffre après la virgule (.)?

Nov 21 2020

J'ai le problème que je n'arrive pas à rassembler le bon RegExp. Mon objectif est d'autoriser jusqu'à 3 chiffres avant la virgule, et UNIQUEMENT SI il y a une décimale, puis 1 chiffre après la virgule. Laquelle RegExpou les expressions régulières dois-je utiliser pour ce comportement?

Résultats autorisés souhaités: 000.0, 00.0, 0.0, 000, 00, 0

c'est le code actuel, mais le problème est qu'ici aussi 4 chiffres peuvent être placés sans décimale:

inputFormatters: [
  FilteringTextInputFormatter.allow(RegExp(r'^\d{1,3}\.?\d{0,1}')),
],

J'ai déjà fait défiler ces derniers mais ils ne fonctionnent pas pour moi:

Javascript Regex pour n'autoriser que les nombres à 2 chiffres et les nombres à 3 chiffres séparés par des virgules

Javascript regex pour correspondre à seulement 11 chiffres, une virgule et 2 chiffres après

Jquery autorise uniquement les flottants à 2 chiffres avant et après le point

Flutter - Regex dans TextFormField

Autoriser seulement deux nombres décimaux dans l'entrée flottante?

Réponses

1 Andrej Nov 21 2020 at 21:33

Je ne suis pas un expert en regex, donc je ne peux que vous suggérer d'utiliser cette fonction d'aide:

  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})?$')

essayez cette regex

aussi je pense par virgule votre décimal moyen (.) et considérant que vous voulez 3 chiffres avant la décimale et 1 décimale après la décimale

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

Le formateur d'entrée n'est pas le cas ici car il formate les données visuellement et les formats souhaités s'incluent les uns les autres. Vous devez utiliser TextFormFieldet validatorpropriété avec le validateur ou utiliser @ Andrej RegExp.

TextFormField(
  autoValidateMode: AutoValidateMode.always,
  validator: (value) {
    return RegEx(r'^\d{1,3}(\.\d)?$').hasMatch(value) ? null : 'Invalid value';
  },
)

RegExp travaille ici .