Laravel ИЛИ Проверка URL или IP - PullRequest
0 голосов
/ 16 июня 2019

У меня есть поле формы, и я хочу проверить, является ли введенное значение действительным URL-адресом ИЛИ IP-адресом.

Я создал пользовательскую проверку запроса формы для проверки URL (доступной проверки URL из laravel было недостаточно), и это прекрасно работает.

Но как я могу изменить свою валидацию, чтобы проверить, является ли она действительным URL-адресом или действительным IP-адресом? Это должно произойти только в том случае, если обе проверки не пройдены.

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class CheckDomain extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * 
     * Manipulate Input Domain before Validation
     *
     */
    protected function prepareForValidation()
    {
        // Remove HTTP - HTTPS
        $this->domain = str_replace([
                            'http://', 'https://'
                        ], '', $this->domain);

        $this->domain = strtok($this->domain, '/'); // Remove Slashes
        $this->domain = strtolower($this->domain); // Make Lowercase

        // Bring Together
        $this->merge([
            'domain' => $this->domain
        ]); 
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'domain' => [
                'required', 'regex:^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$^'
            ]
        ];
    }
}

1 Ответ

0 голосов
/ 16 июня 2019

Вы можете использовать это регулярное выражение

^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?|^((http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$

И ваш код, наконец, должен выглядеть так:

public function rules()
{
    return [
        'domain' => ['required', 'regex:^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?|^((http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$']
    ];
}
...