本文目录导读:

在 Laravel 中配置 URL 验证非常简单,主要通过验证规则来实现,以下是几种常见的配置方式:
基础 URL 验证
使用 url 验证规则
use Illuminate\Support\Facades\Validator;
$validator = Validator::make($request->all(), [
'website' => 'required|url',
]);
if ($validator->fails()) {
// 处理验证失败
}
在控制器中使用
public function store(Request $request)
{
$validated = $request->validate([
'url' => 'required|url',
]);
// 继续处理...
}
在 Form Request 中使用
public function rules()
{
return [
'website' => ['required', 'url'],
];
}
高级 URL 验证选项
验证 URL 格式和协议
'url' => 'url:http,https' // 只允许 http 和 https 'url:http,https,ftp' // 允许多种协议
自定义错误消息
$messages = [
'url.url' => '请输入有效的 URL 地址(需包含 http:// 或 https://)',
];
$validator = Validator::make($request->all(), [
'website' => 'required|url',
], $messages);
使用正则表达式验证
更严格的 URL 验证
'url' => [
'required',
'regex:/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/'
]
只验证域名格式
'domain' => [
'required',
'regex:/^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$/'
]
自定义验证规则
创建自定义验证规则
// 在 AppServiceProvider 的 boot 方法中
use Illuminate\Support\Facades\Validator;
Validator::extend('custom_url', function ($attribute, $value, $parameters, $validator) {
// 检查 URL 是否可访问
$headers = @get_headers($value);
return $headers && strpos($headers[0], '200');
}, 'URL 地址无效或无法访问');
使用自定义规则
'url' => 'required|custom_url'
完整的验证示例
public function storeUrl(Request $request)
{
$rules = [
'url' => [
'required',
'url',
'max:2048',
function ($attribute, $value, $fail) {
// 验证 URL 是否是安全链接 (https)
if (!str_starts_with($value, 'https://')) {
$fail('只允许使用 HTTPS 链接');
}
},
],
'backup_url' => 'nullable|url'
];
$messages = [
'url.required' => '请输入 URL 地址',
'url.url' => '请输入有效的 URL 格式',
'url.max' => 'URL 地址长度不能超过 2048 个字符',
];
$validated = $request->validate($rules, $messages);
// 验证通过后的处理
}
数据库存储时的验证
// 在模型中
public static function rules()
{
return [
'url' => 'required|url|unique:urls,url|max:2048'
];
}
// 在迁移中
Schema::create('urls', function (Blueprint $table) {
$table->id();
$table->string('url', 2048);
// ...
});
注意事项
- URL 长度限制:建议设置
max:2048限制 - 协议要求:默认可选,建议明确要求 http/https
- 安全性:避免直接存储用户输入的 URL 而不作处理
- 国际化 URL:支持 IDN 域名的 URL 需要使用
filter_var或正则验证
推荐的验证规则组合
'url' => [
'required',
'url:http,https', // 只允许 http/https
'max:2048', // 长度限制
// 可选:增加自定义验证
function ($attribute, $value, $fail) {
// 可以添加额外的业务逻辑验证
},
]
这样配置后,Laravel 会自动验证输入的 URL 是否符合标准格式,并提供友好的错误提示。