Проверьте, не входит ли во ввод URL-адрес Laravel

У меня есть 2 входа с социальными аккаунтами, мне нужно войти в эти социальные аккаунты. Мне нужно запретить писать ссылки в этих входах. Как я могу это сделать?

$this->validate($request, [
        'google_plus' => 'required|not:url',
        'twitter' => 'required|not:url',
    ]);

not:url не работает ..

Пример: мне нужно запретить ссылку: https://twitter.com/loginUser И разрешить только: loginUser

Рассмотрите возможность использования флага regex ..

Script47 01.05.2018 11:54

Либо используйте регулярное выражение, либо создайте собственный валидатор laravel.com/docs/5.6/validation#custom-validation-rules

Tuim 01.05.2018 11:54

Вы также можете упростить работу с пользователями и принять URL-адреса и проанализировать дескриптор или что-то еще, что вам действительно нужно.

tremby 01.05.2018 12:07

@tremby поднимает очень хороший вопрос. Почему бы не упростить задачу вашему пользователю? Вы знаете, что twitter.com/loginUser можно заменить на loginUser - сделайте это за них автоматически!

ceejayoz 01.05.2018 18:18
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
4
912
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете использовать валидатор regex или создать пользовательский валидатор, который реализует правило, которое вам нужно.

Например, что-то вроде regex:^https://twitter.com/.+ будет проверять ввод, который начинается с этого домена.

Цель валидаторов - остановить отправку, если она не соответствует требованиям. Исходя из того, что вы описали, вы не хотите останавливать отправку, а просто обрезать ее.

В этом случае не вводите никаких правил в это поле. При сохранении в базу данных используйте preg_replace:

$pattern = "/(?i)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'\".,<>?«»“”‘’]))/";

$newValue = preg_replace($pattern, "", $request->twitter);
Ответ принят как подходящий

Сначала следуйте инструкциям в проверка laravel, настраиваемая проверка чтобы создать новое правило с именем NotUrl, например:

class NotUrl implements Rule
{   
   public function passes($attribute, $value)
   {
      return !filter_var($value, FILTER_VALIDATE_URL);
   }

   public function message()
   {
      return 'The :attribute must not be a complete URL.';
   }
}

Затем подтвердите это следующим образом:

use App\Rules\NotUrl;

    $this->validate($request, [
            'google_plus' => ['required', new NotUrl],
            'twitter' => ['required', new NotUrl],
        ]);

Другие вопросы по теме