You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中如何禁止社交账号输入框填URL?自定义验证规则失效

解决Laravel社交账号输入框禁止链接的验证问题

看起来你尝试用自定义的not:url规则没生效,这大概率是因为Laravel本身没有内置这个规则,而且你也没正确注册自定义规则对吧?别担心,我给你两个靠谱的解决方案:

方案一:直接使用正则表达式验证(快速实现)

不用折腾自定义规则,直接用regex和not_regex组合来限制输入:

$this->validate($request, [
    'google_plus' => 'required|regex:/^[a-zA-Z0-9_.]+$/|not_regex:/(http(s)?:\/\/|www\.)/',
    'twitter' => 'required|regex:/^[a-zA-Z0-9_.]+$/|not_regex:/(http(s)?:\/\/|www\.)/',
]);
  • regex:/^[a-zA-Z0-9_.]+$/:限制输入只能是字母、数字、下划线和点号,适配大多数社交平台的登录名格式
  • not_regex:/(http(s)?:\/\/|www\.)/:明确排除含链接前缀的内容,直接拒绝https://twitter.com/loginUser这类输入

如果你的目标平台允许其他特殊字符,只要调整正则里的字符范围就行。

方案二:创建并注册自定义验证规则(更优雅的复用方式)

如果需要在多个地方复用这个规则,或者想让代码逻辑更清晰,可以创建自定义规则:

  1. 生成规则文件:
php artisan make:rule NotUrl
  1. 在app/Rules/NotUrl.php中实现验证逻辑:
<?php

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class NotUrl implements Rule
{
    /**
     * 判断验证规则是否通过
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        // 利用PHP内置函数判断是否为URL,是则返回false(不通过验证)
        return !filter_var($value, FILTER_VALIDATE_URL);
    }

    /**
     * 获取友好的错误提示
     *
     * @return string
     */
    public function message()
    {
        return 'The :attribute 不能是链接,请仅输入登录账号名。';
    }
}
  1. 在控制器中引入并使用规则:
use App\Rules\NotUrl;

// ...

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

这个方案逻辑更严谨,错误提示也更友好,适合需要多次复用的场景。

额外小提示

如果想进一步规范登录名的长度,可以加上min和max规则,比如min:3|max:20,让验证更贴合实际需求。

内容的提问来源于stack exchange,提问作者Jadasdas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:58:27