Comment autoriser seulement 2 chiffres et 1 chiffre après la virgule (.)?
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 RegExp
ou 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
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;
}
}
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';
},
)
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 TextFormField
et validator
proprié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 .