Html 如何判断字符串是否为web地址?
确定字符串是否表示web地址的最佳方法是什么?我需要让用户在表单中输入网址,但如何验证输入?应允许用户输入“”或“www.vg.no”等字符串,但不应要求用户输入“http://”。此外,还有像“tv2.no”这样的网页更难验证。如果我检查字符串是否包含“www”或“http://”,我有很强的线索,但我仍然不能100%确定。我能百分之百肯定吗?我不这么认为,但也许so的一些优秀人才可以启发我呢?使用一个Html 如何判断字符串是否为web地址?,html,url,Html,Url,确定字符串是否表示web地址的最佳方法是什么?我需要让用户在表单中输入网址,但如何验证输入?应允许用户输入“”或“www.vg.no”等字符串,但不应要求用户输入“http://”。此外,还有像“tv2.no”这样的网页更难验证。如果我检查字符串是否包含“www”或“http://”,我有很强的线索,但我仍然不能100%确定。我能百分之百肯定吗?我不这么认为,但也许so的一些优秀人才可以启发我呢?使用一个 具体的实现方式取决于您使用的语言。最简单的合理确定方法是使用正则表达式,确保您至少有两个域
具体的实现方式取决于您使用的语言。最简单的合理确定方法是使用正则表达式,确保您至少有两个域名组件。这样你就可以处理大多数糟糕的情况。它应该是这样的:
/^(http:\/\/)?(\w+)(\.\w+)+$/
如果你不想要求他们输入http://(或https://),那么你唯一能做的就是字符串是否包含“.”(我假设你不需要处理“内部”服务器?)。您还可以针对已知域进行验证,并检查无效字符,但除此之外,几乎什么都没有
至于实际的实现,如果你能忍受的话,正则表达式将是一条出路。。毫无疑问,如果你在谷歌上搜索,验证URL的例子数不胜数。如果你不打算强制它成为一个有效的URI(也就是说,你让方案成为可选的),那么唯一真正的选择就是尝试通过HTTP连接到它。我认为最快的方法是通过正则表达式测试。但是,这并不能证明它是否是有效的URL。首先,请尝试使用正则表达式验证输入文本是否是格式正确的URL。如果检查正常,请尝试DNS查找以验证主机是否已知。不要忘记localhost或127.0.0.1的特殊情况。还要注意由其IP地址指定的主机。如果这些检查正常,您可能需要尝试实际连接 如果这些检查失败,您可以修改输入文本并再次检查。可能的修改包括:
- 预编
http://
- 预编
www.
- 附加
,.com
,.org
,无论什么.net
- 附加
,:8080
,随便什么:8888
- 混合上述任何一种溶液
- 还可以尝试为本地访问预先设置
文件://
localhost
208.77.188.166
我的建议是完全不验证。相反,使用基于正则表达式的方法,如果不匹配,您可以给出一个软警告:“您所写的地址看起来不是有效的地址。您确定这是您要写的吗?” 绝对不要尝试连接到该地址。这将使您面临各种严重的安全问题,包括使用您的网站对其他网站进行拒绝服务攻击。那会给你带来法律上的麻烦
进行DNS查找的成本很高,但如果您认为值得的话,这是可行的。我想我们都知道正则表达式可以用于模式匹配,我想他是在寻求一种启发式方法,允许接受人类可读的“URL”,即slashdot.org,而不是slashdot.org,这难道不是正则表达式应该接受的字符串的子集吗?“摇摇晃晃的驴子”通过了那个正则表达式,它不是一个有效的地址(包含空格和全部)不,它不是。点之前的斜杠非常重要。你没有任何点。也就是说,你是对的。它不应该是。*?。可能最好使用类似[[:alpha:]的东西*如果有端口号怎么办?如果URL中有查询怎么办?使用一些经过测试的regexp比自己发明轮子要好得多。当然。这完全取决于你想要的确定程度。这就是为什么我没有说我的表达式是解决方案,只是一个简单版本的示例。+1用于最大限度地提高可用性。此外,如果你只在地址栏中输入“巴塞罗那”,一些浏览器等将提供谷歌搜索,这并不总是一件坏事(当然,在OP的上下文中这可能是一件坏事——他应该更好地解释这一点)。我会对连接到给定的URL感到不安,因为存在安全隐患,特别是如果海报不能100%确定他在做什么。我认为,如果“连接”只意味着检查成功或失败,而不递归下载每个内联图像、javascript、CSS等,这可能是安全的。例如,可以使用text-b执行是的,但总有可能有人传递了一些东西,比如www.site.com/delete.php?all,并对受害者隐藏了他的IP,或者有人可以传递file:///usr/lib/foo 并检查您的系统中是否存在该文件等。换言之:我不会越过“100%安全”的界限还有其他问题:如果目标网站现在关闭,十分钟后就会回来怎么办?如果你在寻找“www”,你根本就没有任何线索。Blogspot博客和无数其他网站(包括你现在所在的网站)没有,它们是有效的地址。您能告诉我们更多关于您的验证将被使用的场景吗?在您的“TopLevelDomains”部分中,您可以添加
^(?#Protocol)(?:(?:ht|f)tp(?:s?)\:\/\/|~/|/)?(?#Username:Password)(?:\w+:\w+@)?
(?#Subdomains)(?:(?:[-\w]+\.)+(?#TopLevel Domains)
(?:com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|travel|[a-z]{2}))(?#Port)
(?::[\d]{1,5})?(?#Directories)(?:(?:(?:/(?:[-\w~!$+|.,=]|%[a-f\d]{2})+)+|/)+|\?|#)?
(?#Query)(?:(?:\?(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)
(?:&(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)*)*(?#Anchor)
(?:#(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})+)?(?#What not to end in)[^.!,:;?]$