diff --git a/lib/src/validators/number_validator.dart b/lib/src/validators/number_validator.dart index ce571e2..aa2042e 100644 --- a/lib/src/validators/number_validator.dart +++ b/lib/src/validators/number_validator.dart @@ -43,7 +43,7 @@ import 'package:reactive_forms/src/validators/number_validator_error.dart'; /// ``` class NumberValidator extends Validator { /// The regex expression of a numeric string value. - static final RegExp notNumbersRegex = RegExp(r'[^0-9.]'); + static final RegExp notNumbersRegex = RegExp(r'[^0-9.,]'); /// The allowed number of decimal places in the validated string. /// @@ -74,11 +74,11 @@ class NumberValidator extends Validator { @override Map? validate(AbstractControl control) { // Skip validation if null value is allowed - if (allowNull && control.value == null) { + if (allowNull && _isControlNullOrEmptyString(control)) { return null; } - if (control.value == null) { + if (_isControlNullOrEmptyString(control)) { return { ValidationMessage.number: NumberValidatorError.nullValue, }; @@ -125,10 +125,11 @@ class NumberValidator extends Validator { } bool _validateNumberDecimals(int allowedDecimals, String numberString) { + final deLocalizedNumberString = numberString.replaceAll(',', '.'); // Split the number string at the decimal point - final parts = numberString.split('.'); + final parts = deLocalizedNumberString.split('.'); - if (parts.length > 2 || numberString == '.' || numberString.endsWith('.')) { + if (parts.length > 2 || deLocalizedNumberString == '.' || deLocalizedNumberString.endsWith('.')) { // More than one decimal point, invalid format return false; } @@ -141,4 +142,8 @@ class NumberValidator extends Validator { // Check if the decimal part length is within the allowed limit return parts[1].length <= allowedDecimals; } + + static bool _isControlNullOrEmptyString(AbstractControl control) => + control.value == null || + (control.value is String && (control.value as String).isEmpty); } diff --git a/lib/src/validators/number_validator_error.dart b/lib/src/validators/number_validator_error.dart index 5d75643..32915de 100644 --- a/lib/src/validators/number_validator_error.dart +++ b/lib/src/validators/number_validator_error.dart @@ -1,6 +1,6 @@ -class NumberValidatorError { - static const String nullValue = 'nullValue'; - static const String invalidDecimals = 'invalidDecimals'; - static const String unsignedNumber = 'unsignedNumber'; - static const String invalidNumber = 'invalidNumber'; +enum NumberValidatorError { + nullValue, + invalidDecimals, + unsignedNumber, + invalidNumber, }