Laravel 验证字段必须有 4 个单词

Hos*_*agh 5 laravel

我想让字段名称写成四边形

\n

相同的

\n
    \n
  • “安迪·霍萨姆·拉米·恩泰达”\nor
  • \n
  • “\xd8\xad\xd8\xb3\xd8\xa7\xd9\x85\xd8\xa7\xd8\xad\xd9\x85\xd9\x85\xd8\xaf\xd9\x85\xd8\xad\xd9\x85\ xd8\xaf\xd9\x85\xd8\xaa\xd9\x88\xd9\x84\xd9\x89"
  • \n
\n

我托盘

\n
            'name' => 'regex:/^[\\w\xd8\xa1-\xd9\x8a]+\\s[\\w\xd8\xa1-\xd9\x8a]+\\s[\\w\xd8\xa1-\xd9\x8a]+\\s[\\w\xd8\xa1-\xd9\x8a]+/\n
Run Code Online (Sandbox Code Playgroud)\n

在英语中所有正确的内容在阿拉伯语中都是错误的

\n

正则表达式是正确的我测试它听到 regexr.com/57s61

\n

我可以用另一种方式处理 php,那么如何在 laravel 中编写呢?

\n
if(count(explode(' ',$name)) < 4)\n  {\n     $error[] ='enter full name with 4 words';\n  }\n
Run Code Online (Sandbox Code Playgroud)\n

Kur*_*ars 9

您可以创建一个自定义规则类来以封装的方式进行自定义验证。

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class NumWords implements Rule
{
    private $attribute;
    private $expected;
    
    public function __construct(int $expected)
    {
        $this->expected = $expected;
    }

    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        $this->attribute = $attribute;
        $trimmed = trim($value);
        $numWords = count(explode(' ', $trimmed));
        return $numWords === $this->expected;
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return 'The '.$this->attribute.' field must have exactly '.$this->expected.'  words';
    }
}

Run Code Online (Sandbox Code Playgroud)

然后您可以在验证中的任何地方使用它,如下所示:

    public function rules()
    {
        return [
            'name' => [ 'required', 'string', new NumWords(4)],
        ];
    }
Run Code Online (Sandbox Code Playgroud)