我正在尝试用PHP编写验证脚本,该脚本将与我的网站提供的API一起使用。这个想法是用户将进入他们的API应该工作的所有域,防止竞争对手将代码放在他们的网站上。我只想验证输入的域名是否为有效格式
应允许以下域类型:
我一直在搜索,我发现的代码片段(1,2,3)倾向于将所有域名缩减为最简单的格式{{1}并且似乎没有考虑通配符或子域 - 或者似乎与我正在寻找的操作有点不同。
我希望有一天能够掌握Reg Expressions。
提前致谢!
更新:解决方案
我最终使用拒绝TLD的RegEx - 如果domain.com
失败,我会对域进行DNS检查,作为验证TLD的安全网。这可以防止人们输入preg_match
MyNameIsFred
答案 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+)$