validate static method

String? validate(
  1. String? value, {
  2. int minLength = 3,
  3. int maxLength = 20,
  4. Set<String> forbiddenCharacters = const {'@'},
  5. RegExp? allowedPattern,
})

Validates a username string value against configurable constraints.

Parameters:

  • value: The username string to validate.
  • minLength: Minimum allowed length of the username (default 3).
  • maxLength: Maximum allowed length of the username (default 20).
  • forbiddenCharacters: A set of characters disallowed in the username (default {'@'}).
  • allowedPattern: Optional RegExp pattern that the username must match.

Returns:

  • An error message string if validation fails, or null if valid.

Example:

final error = UsernameValidator.validate(
  'user@name',
  forbiddenCharacters: {'@', '#'},
  allowedPattern: RegExp(r'^[a-zA-Z0-9_]+$'),
);

Implementation

static String? validate(
  String? value, {
  int minLength = 3,
  int maxLength = 20,
  Set<String> forbiddenCharacters = const {'@'},
  RegExp? allowedPattern,
}) {
  final rules = <ValidationRule>[
    Validators.required(message: 'Username is required'),
    Validators.minLength(
      minLength,
      message: 'Username must be at least $minLength characters long',
    ),
    Validators.maxLength(
      maxLength,
      message: 'Username must not exceed $maxLength characters',
    ),
  ];

  if (forbiddenCharacters.isNotEmpty) {
    rules.add(
      Validators.custom(
        (value) =>
            value != null &&
                    forbiddenCharacters.any((char) => value.contains(char))
                ? ''
                : null,
        message: 'Username cannot contain: ${forbiddenCharacters.join(', ')}',
      ),
    );
  }

  if (allowedPattern != null) {
    rules.add(
      Validators.pattern(
        allowedPattern.pattern,
        message: 'Username contains invalid characters',
      ),
    );
  }

  return Validators.validate(value, rules);
}