validate static method
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
nullif 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);
}