Jak dopuścić tylko 2 cyfry i 1 cyfrę po przecinku (.)?
Mam taki problem, że nie potrafię zebrać tego, co właściwe RegExp
. Moim celem jest dopuszczenie do 3 cyfr przed przecinkiem i TYLKO JEŻELI występuje ułamek dziesiętny, a po przecinku 1 cyfra. Którego RegExp
lub Regexes muszę użyć do tego zachowania?
Poszukiwane dozwolone wyniki: 000,0, 00,0, 0,0, 000, 00, 0
to jest obecny kod, ale problem polega na tym, że tutaj również można umieścić 4 cyfry bez dziesiętnego:
inputFormatters: [
FilteringTextInputFormatter.allow(RegExp(r'^\d{1,3}\.?\d{0,1}')),
],
Przewinąłem już te, ale nie działają dla mnie:
Javascript Regex, aby zezwalać tylko na 2-cyfrowe i 3-cyfrowe liczby oddzielone przecinkami
Wyrażenie regularne JavaScript, aby dopasować maksymalnie 11 cyfr, jeden przecinek i 2 cyfry po nim
Jquery dopuszcza tylko 2 cyfry zmiennoprzecinkowe przed i po kropce
Flutter - Regex w TextFormField
Zezwolić tylko na dwie liczby dziesiętne na wejściu trzepotania?
Odpowiedzi
Nie jestem ekspertem od regexów, więc mogę tylko zasugerować użycie tej funkcji pomocniczej:
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})?$')
spróbuj tego wyrażenia regularnego
też myślę przecinkiem o twojej średniej dziesiętnej (.) i biorąc pod uwagę, że chcesz 3 cyfry przed dziesiętną i 1 po przecinku
TextFormField(
autoValidateMode: AutoValidateMode.always,
validator: (value) {
return RegExp(r'^\d{0,3}(\.\d{1})?$').hasMatch(value) ? null : 'Invalid value';
},
)
Nie ma tu miejsca na formatowanie danych wejściowych, ponieważ formatuje dane wizualnie, a żądane formaty obejmują się nawzajem. Powinieneś używać TextFormField
i validator
właściwości z walidatorem @ Andrej lub użyj RegExp
.
TextFormField(
autoValidateMode: AutoValidateMode.always,
validator: (value) {
return RegEx(r'^\d{1,3}(\.\d)?$').hasMatch(value) ? null : 'Invalid value';
},
)
RegExp działa tutaj .