clean_validator


pub version pub points license GitHub stars Tests build codecov Support me on Ko-fi


⭐ Please star this repository to support the project! ⭐


A small collection of composable validator helpers for Dart and Flutter.

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, isRequired
  • validateNotNull, isNotNull
  • validateAgeFromDate, isAgeFromDate
  • validateAge, isAge
  • validateEmail, isEmail
  • validateUrl, isUrl
  • validateEqual, isEqual
  • validateCustom
  • validateRegex, isValidRegex
  • validateLength, isLength
  • validateMinWordsCount, isMinWordsCount
  • validateMaxWordsCount, isMaxWordsCount
  • validatePassword, isPassword, PasswordRule, ContainNumeric, ContainAlphabetic, ContainSpecialCharacters
  • validateJson, isJson, isJsonObject, isJsonArray
  • validateIban, isIban
  • validateIP, isIP, isIPv4, isIPv6
  • validateCreditCardNumber, isCreditCardNumber, isVisa, isMastercard, isAmex, isDiscover, isJCB, isDiners
  • validateCreditCardCvc, isCreditCardCvc
  • validateCreditCardExpiry, isCreditCardExpiry
  • validateIsbn, isIsbn
  • validateBic, isBic
  • validateHexColor, isHexColor
  • validateHexadecimal, isHexadecimal
  • validateContains, isContains
  • validateStartsWith, isStartsWith
  • validateEndsWith, isEndsWith
  • validateBase, isBase, validateBase64, validateBase32, validateBase58
  • validateUUID, isUUID, isUUIDv1, isUUIDv2, isUUIDv3, isUUIDv4, isUUIDv5
  • validateIsPresent, isPresent
  • validateLatitude, 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.

Libraries

clean_validator