我创建了一个用于验证域的解决方案。虽然它没有具体涵盖整个 URL,但它非常详细和具体。您需要问自己的问题是,“我为什么要验证域?” 如果要查看域是否真的存在,则需要确认域(包括有效的 TLD)。问题是,太多的开发人员走捷径 ([az]{2,4}) 并称其为好。如果您按照这些思路思考,那么为什么称其为 URL 验证呢?它不是。它只是通过正则表达式传递 URL。
我有一个开源类,它不仅允许您使用单一来源的 TLD 管理 (iana.org) 来验证域,而且还可以通过 DNS 记录验证域以确保它确实存在。DNS 验证是可选的,但域将根据 TLD 明确有效。
例如:example.ay 不是有效域,因为 .ay 顶级域名无效。但是使用此处发布的正则表达式 ([az]{2,4}),它会通过。我对质量有亲和力。我尝试在我编写的代码中表达这一点。其他人可能并不真正关心。因此,如果您想简单地“检查” URL,您可以使用这些响应中列出的示例。如果您真的想验证 URL 中的域,您可以在我创建的类中执行此操作。它可以在以下位置下载:
http ://code.google.com/p/blogchuck/source/browse/trunk/domains.php
它基于“管理”(松散地使用该术语)确定有效域的内容的 RFC 进行验证。简而言之,域类将执行以下操作:域验证的基本规则
- 必须至少有一个字符长
- 必须以字母或数字开头
- 包含字母、数字和连字符
- 必须以字母或数字结尾
- 可能包含多个节点(即node1.node2.node3)
- 每个节点最多只能有 63 个字符
- 总域名最多只能包含 255 个字符
- 必须以有效的 TLD 结尾
- 可以是 IP4 地址
只有在检查您的本地副本后,它才会下载主 TLD 文件 iana.org 的副本。如果您的本地副本已过期 30 天,它将下载一个新副本。文件中的 TLD 将在 REGEX 中用于验证您正在验证的域中的 TLD。这可以防止 .ay(和其他无效 TLD)通过验证。
这是一段很长的代码,但考虑到它的作用,它非常紧凑。而且是最准确的。这就是我之前问这个问题的原因。你想做“验证”还是简单的“检查”?