feat(Validator): Add regex and date validation methods

This commit is contained in:
kj
2026-09-03 14:42:15 -03:00
parent 1f366830bc
commit 4fe7314389

View File

@@ -339,6 +339,48 @@ class Validator
return static::measure($subject) === (float) $size;
}
/**
* Checks if the value matches a regular expression.
*
* The pattern is received verbatim (delimiters included), thanks to
* splitArguments() treating "regex" as an intact argument, so patterns
* that contain ':' or ',' - such as "/^a,b$/" - work as expected.
*
* @param mixed $subject The value to check.
* @param string $pattern A PCRE pattern including its delimiters.
*
* @return bool
*/
public static function regex(mixed $subject, mixed $pattern): bool
{
return preg_match((string) $pattern, (string) $subject) === 1;
}
/**
* Checks if the value is a parseable date.
*
* Any format accepted by DateTime is valid (e.g. "2026-09-03", an ISO
* datetime, or a timestamp string). Empty and non-scalar values fail.
*
* @param mixed $subject The value to check.
*
* @return bool
*/
public static function date(mixed $subject): bool
{
if (!is_scalar($subject) || trim((string) $subject) === '') {
return false;
}
try {
new \DateTime((string) $subject);
return true;
} catch (Exception $e) {
return false;
}
}
/**
* Checks if the value is a valid email address.
*