验证域名PHP

验证域名PHP,php,regex,Php,Regex,我需要使用PHP验证域名。 只允许使用此格式:google.com,subdomain.stack overflow.orgetc 它应该只允许-(在特殊字符的情况下) 不允许使用其他格式,例如:http、https、/index.php、www.等(不允许使用这些格式) 我也不想允许:localhost,mydomain.com 我尝试过:FILTER\u VALIDATE\u URL但它接受http等 我还尝试了类似这样的正则表达式:[a-z0-9-]+([a-z0-9-]+) 但是它允许例

我需要使用PHP验证域名。
只允许使用此格式:
google.com
subdomain.stack overflow.org
etc
它应该只允许-(在特殊字符的情况下)

不允许使用其他格式,例如:
http、https、/index.php、www.
等(不允许使用这些格式)

我也不想允许:
localhost
mydomain.com

我尝试过:
FILTER\u VALIDATE\u 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'];
}

你的正则表达式几乎是正确的。只是
是“任意字符”的缩写,而不仅仅是“.”。那么,试试这个正则表达式:

/([0-9a-z-]+\)?[0-9a-z-]+\[a-z]{2,7}/
请记住,引入了新的顶级域。它们不使用拉丁字符。看一看


关于排除“mydomain.com”:应用正则表达式后,您必须检查是否存在此问题。

您的正则表达式几乎正确。只是
是“任意字符”的缩写,而不仅仅是“.”。那么,试试这个正则表达式:

/([0-9a-z-]+\)?[0-9a-z-]+\[a-z]{2,7}/
请记住,引入了新的顶级域。它们不使用拉丁字符。看一看


关于排除“mydomain.com”:在应用正则表达式后,您必须检查是否存在此问题。

因此
help.me有问题
是否有效?为什么不使用过滤器\u验证\u URL,然后使用str_replace删除http?@RichBradshaw:Because then
http://example.com/page
也是允许的。@RichBradshaw-
过滤器\u验证\u URL
接受任何类型的URL,而不仅仅是HTTP,并且不对主机名施加限制(因此
localhost
不会按照OP的要求被过滤掉).@sash我刚刚链接到未被接受的答案,它适用于您的情况,请参见。因此
help.me有问题
是否有效?为什么不使用过滤器\u验证\u URL,然后使用str_replace删除http?@RichBradshaw:Because then
http://example.com/page
也是允许的。@RichBradshaw-
过滤器\u验证\u URL
接受任何类型的URL,而不仅仅是HTTP,并且不对主机名施加限制(因此
localhost
不会按照OP的要求被过滤掉)@sash我刚刚链接到了一个不被接受的答案,它适用于你的情况,见a。谢谢你,我正在尝试这个。请检查问题我已经编辑了它,我想允许子域像subdomain.stack-overflow.org也。谢谢,我也想允许子域,比如“user.server.domain.tld”?不,我只想允许子域。但是域不应该是localhost或mydomain.com谢谢,我正在尝试。请检查问题我已经编辑了它,我想允许子域像subdomain.stack-overflow.org也。谢谢,我也想允许子域,比如“user.server.domain.tld”?不,我只想允许子域。但是域不应该是localhost或mydomain.com