Clean Validator provides lightweight validator functions you can use in
TextFormField validators or call directly to validate strings. Each validator
returns a String? Function(String?) that evaluates the input and returns an
error message on failure or null when valid.
Features
- Small, focused validator functions (email, url, length, regex, etc.)
- Compose multiple validators with the
.validate()extension - Per-validator and composed fail message overrides
Installation
From the command line:
flutter pub add clean_validator
# or for pure Dart
dart pub add clean_validator
Quick Usage
Import the package:
import 'package:clean_validator/clean_validator.dart';
Single validator example:
final emailValidator = validateEmail();
final error = emailValidator('not-an-email'); // 'Please enter a valid email address'
Compose multiple validators using the provided extension:
final validator = [
validateRequired(),
validateEmail(),
].validate();
final error = validator(''); // 'This field is required'
final ok = validator('user@example.com'); // null
Use directly in a Flutter TextFormField:
TextFormField(
validator: [
validateRequired(),
validateEmail()
].validate(),
)
Override the fail message on an individual validator:
validateRequired(failMessage: 'Please enter a value');
Or override the composed failure message (first failing message is returned):
final composed = [validateRequired(), validateEmail()].validate(failMessage: 'Invalid input');
Available validators (names)
validateRequired,isRequiredvalidateNotNull,isNotNullvalidateAgeFromDate,isAgeFromDatevalidateAge,isAgevalidateEmail,isEmailvalidateUrl,isUrlvalidateEqual,isEqualvalidateCustomvalidateRegex,isValidRegexvalidateLength,isLengthvalidateMinWordsCount,isMinWordsCountvalidateMaxWordsCount,isMaxWordsCountvalidatePassword,isPassword,PasswordRule,ContainNumeric,ContainAlphabetic,ContainSpecialCharactersvalidateJson,isJson,isJsonObject,isJsonArrayvalidateIban,isIbanvalidateIP,isIP,isIPv4,isIPv6validateCreditCardNumber,isCreditCardNumber,isVisa,isMastercard,isAmex,isDiscover,isJCB,isDinersvalidateCreditCardCvc,isCreditCardCvcvalidateCreditCardExpiry,isCreditCardExpiryvalidateIsbn,isIsbnvalidateBic,isBicvalidateHexColor,isHexColorvalidateHexadecimal,isHexadecimalvalidateContains,isContainsvalidateStartsWith,isStartsWithvalidateEndsWith,isEndsWithvalidateBase,isBase,validateBase64,validateBase32,validateBase58validateUUID,isUUID,isUUIDv1,isUUIDv2,isUUIDv3,isUUIDv4,isUUIDv5validateIsPresent,isPresentvalidateLatitude,isLatitude,validateLongitude,isLongitude,validateCoordinatePair,validateCoordinateString,isCoordinate,isCoordinateString
For the full code and exact signatures, see the lib/src/validators folder or the example in the example/ directory.
Example
See example/clean_validator_example.dart for a runnable example.
Contributing
Contributions, issues and feature requests are welcome. Feel free to open an issue or a pull request.
License
This project is licensed under the terms in the LICENSE file.