Я пытаюсь использовать регулярные выражения для проверки введенных пользователем URL. Я придумал это регулярное выражение:
function is_valid_url(url) { return url.match(/^(ht|f)tps?:\/\/[a-z0-9-\.]+\.[a-z]{2,4}\/?([^\s<>\#%"\,\{\}\\|\\\^\[\]`]+)?$/); }
Отлично работает для большинства простых URL. Однако, когда я попытался ввести этот URL с Google Maps:
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 является спорным, поскольку для него не существует идеального решения, но я хочу знать, есть ли у вас какое-либо регулярное выражение, которое работает лучше моего и может возвращать true для такого типа URL.
^((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
Самый простой вариант: используйте регулярное выражение, которое работает.
(((http|ftp|https):\/\/)|www\.)[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#!]*[\w\-\@?^=%&/~\+#])?
Regexr: http://regexr.com? 2tpo8