数组项目的Laravel条件验证规则

问题描述

我有以下有效的验证规则,该规则检查以确保每个收件人,抄送和密件抄送电子邮件列表均包含有效的电子邮件地址:

  return [
            'recipients.*' => 'email','cc.*' => 'email','bcc.*' => 'email',];

我还需要能够为每个规则允许字符串###EMAIL###以及电子邮件验证,并在Laravel 5.8中努力创建自定义验证规则(目前无法升级

任何想法如何解决?如果它是Laravel的更高版本,我正在考虑类似(未经测试)的方法,以使您了解我正在尝试做的事情:

return [
    'recipients.*' => 'exclude_if:recipients.*,###EMAIL###|email','cc.*' => 'exclude_if:recipients.*,'bcc.*' => 'exclude_if:recipients.*,];

解决方法

在5.8中,您可以创建Custom Rule Object,让我们看看如何使其真正起作用。

  1. 使用names = df1.filter(like='Name').stack().to_numpy() # array(['aaa','bbb','sss','ddd','xxx','qqq','iii','ooo'],dtype=object) df2 = df2[df2.Title.str.startswith(tuple(names))] print(df2) Title Col1 Col2 0 aaaLKJ ... ... 2 dddKJH ... ... 3 ooo123 ... ... 4 aaa098 ... ...
  2. 创建规则
  3. 使其看起来像这样
php artisan make:rule EmailRule
  1. 将其包含在规则中,使其看起来像
<?php

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class EmailRule implements Rule
{
    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute,$value)
    {
        if ($value === '###EMAIL###' or filter_var($value,FILTER_VALIDATE_EMAIL)) {
            return true;
        }
        return false;
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return 'The :attribute must be valid email or ###EMAIL###.';
    }
}
  1. 编写测试(可选)