如何判断字符串是否是网址?

Sve*_*sli 2 html url

确定字符串是否代表网址的最佳方法是什么?我需要让用户在表单中输入网址,但如何验证输入?应允许用户输入" http://www.google.com "或"www.vg.no" 等字符串,但不应要求他输入"http://".此外,有像"tv2.no"这样的网页更难以验证.如果我检查字符串是否包含"www"或"http://"我有一个强有力的线索,但我仍然不是100%肯定.我能100%肯定吗?我不这么认为,但也许SO的一些优秀思想能够启发我吗?

Lea*_*ing 6

为随后的表达道歉,但它似乎捕获了大多数(如果不是全部)案例:

^(?#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)[^.!,:;?]$
Run Code Online (Sandbox Code Playgroud)