fix: noverify + типы для правил провеки

This commit is contained in:
origami11@yandex.ru 2025-01-21 19:33:33 +03:00
parent 9680409ba9
commit 90cbd3b2b6
10 changed files with 319 additions and 300 deletions

View file

@ -10,20 +10,14 @@ use ctiso\Validator\Rule\AbstractRule,
class Email extends AbstractRule
{
public function getErrorMsg()
{
{
return "Неверный формат электронной почты";
}
public function isValid(Collection $container, $status = null)
{
$user = '[a-zA-Z0-9_\-\.\+\^!#\$%&*+\/\=\?\|\{\}~\']+';
$doIsValid = '(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9]\.?)+';
$ipv4 = '[0-9]{1,3}(\.[0-9]{1,3}){3}';
$ipv6 = '[0-9a-fA-F]{1,4}(\:[0-9a-fA-F]{1,4}){7}';
$emails = explode(",", $container->get($this->field));
foreach ($emails as $email) {
// if (! preg_match("/^$user@($doIsValid|(\[($ipv4|$ipv6)\]))$/", $email)) return false;
if (! filter_var($email, FILTER_VALIDATE_EMAIL)) return false;
}

View file

@ -12,24 +12,29 @@ use Exception,
class Validator
{
protected $chain = array(); // Массив правил
protected $errorMsg = array(); // Массив ошибок
protected $type = array(
'date' => 'ctiso\\Validator\\Rule\\Date',
'email' => 'ctiso\\Validator\\Rule\\Email',
'emaillist'=> 'ctiso\\Validator\\Rule\\EmailList',
'match' => 'ctiso\\Validator\\Rule\\MatchRule',
'time' => 'ctiso\\Validator\\Rule\\Time',
'alpha' => 'ctiso\\Validator\\Rule\\Alpha',
'require' => 'ctiso\\Validator\\Rule\\Notnull',
'numeric' => 'ctiso\\Validator\\Rule\\Numeric',
'unique' => 'ctiso\\Validator\\Rule\\Unique',
'filename' => 'ctiso\\Validator\\Rule\\FileName',
'count' => 'ctiso\\Validator\\Rule\\Count',
'isfile' => 'ctiso\\Validator\\Rule\\IsFile',
'code' => 'ctiso\\Validator\\Rule\\Code',
'reg' => 'ctiso\\Validator\\Rule\\PregMatch',
);
protected $chain = []; // Массив правил
protected $errorMsg = []; // Массив ошибок
/**
* Поля по умолчанию
* @var array<string, class-string<Rule\AbstractRule>>
*/
protected $type = [
'date' => Rule\Date::class,
'email' => Rule\Email::class,
'emaillist'=> Rule\EmailList::class,
'match' => Rule\MatchRule::class,
'time' => Rule\Time::class,
'alpha' => Rule\Alpha::class,
'require' => Rule\Notnull::class,
'numeric' => Rule\Numeric::class,
'unique' => Rule\Unique::class,
'filename' => Rule\FileName::class,
'count' => Rule\Count::class,
'isfile' => Rule\IsFile::class,
'code' => Rule\Code::class,
'reg' => Rule\PregMatch::class,
];
function __construct($rules = []) {
$this->addRuleList($rules);
@ -98,13 +103,17 @@ class Validator
return false;
}
function reset() {
$this->errorMsg = [];
}
public function validate(Collection $container, $rule = null, $status = null)
{
$fields = [];
if ($rule) {
$this->chain = $rule;
}
$this->errorMsg = [];
// $this->errorMsg = [];
foreach ($this->chain as $rule) {
//echo $key;
if (!in_array($rule->field, $fields) && !$this->skip($rule, $container) && !$rule->isValid($container, $status)) {