使用Javascript进行URL验证

时间:2011-05-18 12:03:26

标签: javascript regex validation url

我正在尝试使用正则表达式验证用户输入的网址。我想出了这个正则表达式:

function is_valid_url(url)
{
     return url.match(/^(ht|f)tps?:\/\/[a-z0-9-\.]+\.[a-z]{2,4}\/?([^\s<>\#%"\,\{\}\\|\\\^\[\]`]+)?$/);
}

它适用于大多数简单的URL。但是,当我尝试从Google地图输入此网址时:

http://maps.google.com/maps?f=d&source=s_d&saddr=Brooklyn%2C+NY&daddr=Stewart+Ave&hl=en&geocode=FRBFbAId0JyX-ykJIXyUFkTCiTGGeAAEdFx2gg%3BFcAqbQIdgPuX-w&mra=mift&mrsp=1&sz=12&sll=40.65%2C-73.95&sspn=0.182857%2C0.308647&g=Brooklyn%2C+New+York%2C+NY%2C+United+States&ie=UTF8&z=12

然后该函数返回false,即使此URL正确。

我知道使用正则表达式进行URL验证是有争议的,因为没有完美的解决方案,但我想知道你是否有比我的更好的正则表达式,并且可以为这种URL返回true。

2 个答案:

答案 0 :(得分:1)

^((http|https|ftp):\/\/)?([a-z]+\.)?[a-z0-9-]+(\.[a-z]{1,4}){1,2}(/.*\?.*)?$

匹配

http://www.example.com
www.example.com
example.com
example.info
abc.com.uk
www.example.co.in
www.example.com.sg
example.com.sg
t.com
co.co
https://www.t.co
asd.com.io/abc?foo=blah

误报

abc.com.sg.in
example.com.aero.uk

答案 1 :(得分:0)

最简单的选择:使用有效的正则表达式。

(((http|ftp|https):\/\/)|www\.)[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:/~\+#!]*[\w\-\@?^=%&amp;/~\+#])?

Regexr: http://regexr.com?2tpo8