106
0
Validation Laravel1

ایجاد قوانین اعتبار سنجی سفارشی (Validation Rules) برای لاراول

2 دقیقه

به صورت پیش فرض برای قوانین اعتبار سنجی از Request Validation استفاده می کنیم که داده های ورودی کاربر را اعتبارسنجی می کند.

اما می خواهیم اعتبار سنجی خاصی ایجاد کنیم که از پیش فرض Request Validation استفاده نمی کند و با استفاده Regex داده های ورودی کاربر را اعتبار سنجی کنیم و فرض کن برای داده های ورودی mobile و password داریم.

با دستورات زیر دو فایل ValiMobile و ValiPassword ایحاد می کنیم.
php artisan make:rule ValidMobile
php artisan make:rule ValidPassword
برای Regex از سایت زیر کمک گرفتم.
https://ihateregex.io/
کد فایل VailMobile :
class ValidMobile implements ValidationRule
{
    public function __construct()
    {
        //
    }
    public function passes($attribute, $value): bool|int
    {
        return preg_match('/^9[0-9]{9}$/', $value);
    }

    public function validate(string $attribute, mixed $value, Closure $fail): void
    {
        if (!preg_match('/^9[0-9]{9}$/', $value)) {
            $fail('شماره ' . $attribute . 'شما 10 رقمی می باشد و بدون صفر وارد کنید.');
        }
    }
}
کد فایل VailPassword :
class ValidPassword implements ValidationRule
{
    public function __construct()
    {
        //
    }
    public function passes($attribute, $value): bool|int
    {
        return preg_match('/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$ %^&*-]).{8,}$/', $value);
    }

    public function validate(string $attribute, mixed $value, Closure $fail): void
    {
        if (!preg_match('/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$ %^&*-]).{8,}$/', $value)) {
            $fail('نوع'  . $attribute .  'نامناسب است و باید ترکیبی از حروف بزرگ و کوچک و اعداد باشد.');
        }
    }
}
در آخر با new این دو Validate را صدا می زنیم.
use App\Rules\ValidMobile;
use App\Rules\ValidPassword;

return Validator::make($data,
   [
      'mobile' => ['nullable', 'string', 'unique:users', new ValidMobile()],
      'password' => ['required', 'string', 'confirmed', new ValidPassword()],
   ]
);
پیش نمایش :
Screenshot 2024 04 04 at 16 18 26 Laravel
لاراول (Laravel) آوریل / 12 / 2024 577

دیدگاه شما