使用Laminas\Validator\Uri验证URL失效,如何配置成标准URL验证?
Laminas\Validator\Uri 验证标准URL的配置方案
问题重现
使用Laminas\Validator\Uri时,无论传入什么值(哪怕单个字母),isValid()始终返回true,手动设置Scheme也无法改变这一结果,希望实现和filter_var($url, FILTER_VALIDATE_URL)一致的标准URL验证效果。
核心原因
Laminas\Validator\Uri默认允许相对URI(比如单个路径片段、相对路径),这是导致非URL值被判定为有效的根本原因。要验证标准绝对URL,需要强制验证器要求完整的协议(scheme)和主机(host)。
解决方案
初始化验证器时传入配置选项,禁用相对URI并强制要求必要的URL组成部分:
$uriValidator = new Uri([ 'allowRelative' => false, 'requireScheme' => true, 'requireHost' => true, ]); $result = $uriValidator->isValid($someVariable);
配置项说明
allowRelative:设为false后,仅允许绝对URI,直接排除相对路径类的无效值requireScheme:设为true后,必须包含http/https等协议头requireHost:设为true后,必须包含域名或IP形式的主机地址
进阶限制(可选)
如果需要只允许http/https协议,可以添加协议白名单:
$uriValidator = new Uri([ 'allowRelative' => false, 'requireScheme' => true, 'requireHost' => true, 'allowedSchemes' => ['http', 'https'], ]);
配置完成后,验证器的行为就和filter_var($url, FILTER_VALIDATE_URL)基本一致,只会通过符合标准的绝对URL。
内容的提问来源于stack exchange,提问作者Luka
相关产品推荐
相关产品推荐

