Проверьте, если во входе не URL-адрес Laravel - PullRequest
0 голосов
/ 01 мая 2018

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

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

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

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

Ответы [ 3 ]

0 голосов
/ 01 мая 2018

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

В этом случае не накладывайте никаких правил на это поле. При сохранении в базу данных используйте 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);
0 голосов
/ 01 мая 2018

Сначала следуйте инструкциям в проверка достоверности, пользовательская проверка создать новое правило с именем 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],
        ]);
0 голосов
/ 01 мая 2018

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...