【发布时间】:2015-06-23 00:20:27
【问题描述】:
我需要做的是允许文本字段验证并允许 mailto: http:// 或 tel: URL 类型。
我正在使用 PHP 5(和 Laravel 4,但与本文无关)。
我已经在谷歌上搜索了一段时间,但我似乎无法找到一个允许匹配所有三种类型的表达式。我尝试了一些长而复杂的字符串,以及一些真正的短字符串,但它只是返回 false。
这是我的最新消息:
mailto:([^\?]*)|http:([^\?]*)|tel:([^\?]*)
解决方案:
由于我使用的是 Laravel 4,我决定使用 parse_url 函数而不是正则表达式。也就是说,还提供了一些其他出色的解决方案。
我的最终验证器函数:
Validator::extend('any_url', function($attribute, $value)
{
$allowed = ['mailto', 'http', 'https', 'tel'];
$parsed = parse_url($value);
return in_array($parsed['scheme'], $allowed);
});
【问题讨论】:
-
捕捉零件?
(mailto:([^\?]*))|(http:([^\?]*))|(tel:([^\?]*)) -
如果您只需要验证,您可以使用
filter_var和FILTER_VALIDATE_URL作为过滤器。你可以在这里查看一些测试:php.net/manual/en/filter.filters.validate.php#110411 -
^^ FILTER_VALIDATE_URL 几乎是答案,但它不支持 tel: protocol