如何验证 Youtube Url validateOnly Laravel Livewire

How to validate Youtube Url validateOnly Laravel Livewire

我正在尝试验证 youtube 地址是否已放入 youtube url,我不希望它是严格的,但至少可以验证它没有放置任何内容.我正在尝试自定义验证,但我没有发现它们是如何完成的,你能帮帮我吗?

我想实现这样的东西:

$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',

        ]);

    }

您可以添加自定义验证吗?我将不胜感激一个如何完成它的例子。感谢您花时间来咨询我。

您需要为此使用 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",
]);

添加自定义规则:

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

验证:

'video' => new RuleYoutube,

接受的答案可能会接受无效的 Youtube links,例如这个 link 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")]));
                }
            },
        ],