PHP - 使用wilcards和/或子域验证域

时间:2013-03-27 13:38:56

标签: php regex

我正在尝试用PHP编写验证脚本,该脚本将与我的网站提供的API一起使用。这个想法是用户将进入他们的API应该工作的所有域,防止竞争对手将代码放在他们的网站上。我只想验证输入的域名是否为有效格式

应允许以下域类型:

  • xyz.domain.xxxx
  • *。domain.xxxx
  • domain.xxxx

我一直在搜索,我发现的代码片段(123)倾向于将所有域名缩减为最简单的格式{{1}并且似乎没有考虑通配符或子域 - 或者似乎与我正在寻找的操作有点不同。

我希望有一天能够掌握Reg Expressions。

提前致谢!

更新:解决方案

我最终使用拒绝TLD的RegEx - 如果domain.com失败,我会对域进行DNS检查,作为验证TLD的安全网。这可以防止人们输入preg_match

之类的垃圾
MyNameIsFred

2 个答案:

答案 0 :(得分:1)

这应验证域名(使用通配符)

'/^(?!.{254,})(?!.*[^.]{64,})(?!.*\*\*)([a-z0-9*](?>[a-z0-9-*]*[a-z0-9*])?)(?>\.(?1)){1,126}$/iD'

将允许仅限TLD的域(根据请求删除),或只允许*

不允许连续* s。

如果上述方法无效,则可能是因为您使用的是旧版本的PHP(以及旧版本的PCRE)。以下内容应解决该问题:

'/^(?!.{254,})(?!.*[^.]{64,})(?!.*\*\*)[a-z0-9*](?>[a-z0-9-*]*[a-z0-9*])?(?>\.[a-z0-9*](?>[a-z0-9-*]*[a-z0-9*])?){1,126}$/iD'

答案 1 :(得分:0)

非常简单,没有对不同部分进行太多测试,只有一般模式。

^([\w*]+\.)?([\w-]+)(\.\w+)$