Laravel如何配置URL验证规则同时支持带/不带https的网址输入
解决方案
Laravel 自带的 url 校验规则强制要求输入内容包含合法协议头(如http://、https://),因此不带前缀的www.example.com会触发校验失败,以下是两种可直接落地的实现方案:
方案1:自定义正则校验规则(兼容带/不带协议头的输入)
直接替换Fortify中原有的url校验规则,用正则同时匹配两种格式的域名:
'website' => [ 'nullable', 'regex:/^((https?:\/\/)?[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z]{2,}(\/[^\s]*)?$/i', ],
正则可根据业务需要调整,比如是否允许携带端口、路径、查询参数等场景。
方案2:自动补全协议头(更推荐,数据格式统一)
不修改原有校验规则,提前处理用户输入的内容,自动为不带协议头的域名补全https://前缀,既满足用户输入习惯,也能保证存入数据库的网址格式统一,后续使用时不会出现跳转异常。
你使用的是Livewire组件,可以直接在组件中添加字段更新钩子处理输入:
// 在对应的Livewire组件中添加以下方法 public function updatedWebsite($value) { // 输入非空且没有http开头时自动补全https前缀 if (filled($value) && !str_starts_with($value, 'http')) { $this->website = 'https://' . $value; } }
处理完成后原有Fortify的'website' => ['nullable', 'url']校验规则可以直接正常使用。
内容的提问来源于stack exchange,提问作者Laravel Liwevire Question
相关产品推荐
相关产品推荐

