【问题标题】:How to validate Youtube Url validateOnly Laravel Livewire如何验证 Youtube 网址 validateOnly Laravel Livewire
【发布时间】:2021-04-20 15:03:28
【问题描述】:

我正在尝试验证 youtube 地址是否已放入 youtube 网址中,我不希望它过于严格,但至少可以验证它没有放入任何内容。我正在尝试自定义验证,但我不知道它们是如何完成的,请您帮帮我。

我想实现这样的东西:

$rx = '~
  ^(?:https?://)?                           # Optional protocol
   (?:www[.])?                              # Optional sub-domain
   (?:youtube[.]com/watch[?]v=|youtu[.]be/) # Mandatory domain name (w/ query string in .com)
   ([^&]{11})                               # Video id of 11 characters as capture group 1
    ~x';

$has_match = preg_match($rx, $url, $matches);

我使用实时验证如下:

public function updated($field)

    {

        $this->validateOnly($field, [

            'name' => 'required|max:255|min:3',

            'last_name' => 'required|max:255|min:3',

            'password' => 'min:6|required',

            'password_confirmation' => 'same:password',

            'email' => 'unique:App\User,email|required|email',

        ]);

    }

您可以添加自定义验证吗?我将非常感谢如何做到这一点的一个例子。感谢您花时间接受我的咨询。

【问题讨论】:

    标签: laravel validation laravel-7 laravel-livewire


    【解决方案1】:

    接受的答案可能接受无效的 Youtube 链接,例如此链接 https://www.xxx.be/watch?v=wxQuTsgMw3Y 将通过验证!

    你可以用这个:

            'input_name' => [
                'required',
                'url',
                function ($attribute, $value, $fail) {
                    if (!preg_match('/(youtube.com|youtu.be)\/(watch)?(\?v=)?(\S+)?/', $value)) {
                        $fail(trans("general.not_youtube_url", ["name" => trans("general.url")]));
                    }
                },
            ],
    

    【讨论】:

      【解决方案2】:

      添加自定义规则:

      public function passes($attribute, $value)
          {
              return (bool) preg_match('/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=|\?v=)([^#\&\?]*).*/',$value);
          }
      

      验证:

      'video' => new RuleYoutube,
      

      【讨论】:

        【解决方案3】:

        您需要为此使用regex 验证规则:

        $rx = '~
          ^(?:https?://)?                           # Optional protocol
           (?:www[.])?                              # Optional sub-domain
           (?:youtube[.]com/watch[?]v=|youtu[.]be/) # Mandatory domain name (w/ query string in .com)
           ([^&]{11})                               # Video id of 11 characters as capture group 1
            ~x';
        
        $this->validateOnly($field, [
            'youtube_url' => "regex:$rx",
        ]);
        

        【讨论】:

        • 我正在尝试在组件中添加函数,但 $ rx 变量给了我一个错误。你能告诉我是这样添加的还是应该创建另一个函数?非常感谢
        猜你喜欢
        • 1970-01-01
        • 2021-07-22
        • 2012-01-29
        • 2022-01-07
        • 2021-09-12
        • 2021-06-12
        • 2022-08-23
        • 2020-11-20
        • 1970-01-01
        相关资源
        最近更新 更多