【问题标题】:Validate domain name PHP [duplicate]验证域名PHP [重复]
【发布时间】:2013-08-22 07:59:23
【问题描述】:

我需要使用 PHP 验证域名。
只允许使用这种格式:google.comsubdomain.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

标签: php regex


【解决方案1】:

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

/([0-9a-z-]+\.)?[0-9a-z-]+\.[a-z]{2,7}/

请记住,引入了新的顶级域。他们不使用拉丁字符。看看http://many.at/idntlds/

关于排除“mydomain.com”:您必须在应用正则表达式后进行检查。

【讨论】:

  • 谢谢,我正在尝试这个。请检查我编辑过的问题,我也想允许 subdomain.stack-overflow.org 之类的子域。非常感谢
  • 是否也希望允许子域,例如“user.server.domain.tld”?
  • 不,我只想允许子域。但域不应是 localhost 或 mydomain.com
猜你喜欢
  • 2012-12-19
  • 2010-12-17
  • 1970-01-01
  • 2011-03-02
  • 1970-01-01
  • 2011-07-21
  • 2019-02-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多