У меня есть 2 входа с социальными аккаунтами, мне нужно войти в эти социальные аккаунты. Мне нужно запретить писать ссылки в этих входах. Как я могу это сделать?
$this->validate($request, [
'google_plus' => 'required|not:url',
'twitter' => 'required|not:url',
]);
not:url
не работает ..
Пример: мне нужно запретить ссылку: https://twitter.com/loginUser И разрешить только: loginUser
Либо используйте регулярное выражение, либо создайте собственный валидатор laravel.com/docs/5.6/validation#custom-validation-rules
Вы также можете упростить работу с пользователями и принять URL-адреса и проанализировать дескриптор или что-то еще, что вам действительно нужно.
@tremby поднимает очень хороший вопрос. Почему бы не упростить задачу вашему пользователю? Вы знаете, что twitter.com/loginUser
можно заменить на loginUser
- сделайте это за них автоматически!
Вы можете использовать валидатор 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],
]);
Рассмотрите возможность использования флага
regex
..