【发布时间】:2013-08-22 07:59:23
【问题描述】:
我需要使用 PHP 验证域名。
只允许使用这种格式:google.com、subdomain.stack-overflow.org 等
它应该只允许 - (在特殊字符的情况下)
不允许使用其他格式,例如:http, https,?,/index.php,www. 等(均不允许使用)。
我也不想允许:localhost,mydomain.com
我尝试过:FILTER_VALIDATE_URL,但它接受 http 等。
我还尝试了这样的正则表达式:[a-z0-9-]+(.[a-z0-9-]+)
但它允许前:stackoverflow(没有.org)。
我怎样才能做到这一点?
$urlparts = parse_url(filter_var($url, FILTER_SANITIZE_URL));
if(!isset($urlparts['host'])){
$urlparts['host'] = $urlparts['path'];
}
【问题讨论】:
-
那么
help.me is having problems有效吗? -
为什么不用FILTER_VALIDATE_URL,然后用str_replace 去掉http?
-
@RichBradshaw:因为那时
http://example.com/page也是允许的。 -
@RichBradshaw -
FILTER_VALIDATE_URL接受任何类型的 URL,不仅是 HTTP,并且不对主机名施加限制(因此localhost不会按照 OP 的要求被过滤掉)。 -
@sash 我刚刚链接到未接受的答案,它适用于您的情况,请参阅demo。