2015-02-12 4 views
0

Я знаю, что это было задано бесчисленное количество раз, и я проверил почти все ответы на Stackoverflow, но я не могу заставить его работать правильно.Regex заставляет браузер сбой?

Когда пользователь вводит URL-адрес изображения на моем сайте, я хочу проверить, действительно ли URL-адрес до добавления изображения в DOM.

Вот что я использую в настоящее время:

function isValidURL(textval) { 
    var urlregex = new RegExp("^(http|https|ftp)\://([a-zA-Z0-9\.\-]+(\:[a-zA-Z0-9\.&%\$\-]+)*@)*((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|co\.uk|[a-zA-Z]{2}))(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\?\'\\\+&%\$#\=~_\-]+))*$"); 
    return urlregex.test(textval); 
} 

Это работает отлично на некоторое время, пока я не попытался ввести следующий URL в текстовое поле, и он просто продолжает разбивать весь браузер!

http://i.dailymail.co.uk/i/pix/2015/02/11/2595F03200000578-2949888-image-a-64_1423695120362.jpg 

Я знаю, что URL работает отлично, и я создал JSFiddle, чтобы проверить его здесь http://jsfiddle.net/Lg0an1hz/

Теперь попробуйте ввести URL в этой обновленной версии одного и того же скрипку http://jsfiddle.net/Lg0an1hz/1/

Мои сбои всего браузера!

Может ли кто-нибудь указать мне правильное регулярное выражение, чтобы убедиться, что URL-адрес введен. На самом деле, мне просто нужно проверить, что независимо от введенного пользователем начинается с http://, https:// или www. Я не думаю, что любое другое начало URL-адреса, если кто-то не знает лучше.

+0

Кажется, что это выражение не является наиболее эффективным и может привести к [катастрофический откат] (http://www.regular-expressions.info/catastrophic. HTML). – Sam

+0

Я понятия не имею, какое регулярное выражение я должен использовать. Я только что скопировал этот ответ из другого ответа здесь –

ответ

2

Попробовать это < jsfiddle>:

function isValidURL(textval) { 
var urlregex = new RegExp("^(http[s]?:\\/\\/(www\\.)?|ftp:\\/\\/(www\\.)?|www\\.){1}([0-9A-Za-z-\\[email protected]:%_\+~#=]+)+((\\.[a-zA-Z]{2,3})+)(/(.)*)?(\\?(.)*)?"); 

    return urlregex.test(textval); 
} 
+0

Есть ли способ заставить его работать на 'keyup', а не на' click'? –

+0

Конечно, просто измените '$ ('# verify'). On ('click')' to '$ ('# url'). On ('keyup')' –

+0

Проверьте jsFiddle –

Смежные вопросы