Регулярные выражения безопасны для лексической действительности, но это не значит, что сайт будет там. На самом деле вам нужно будет проверить соединение, чтобы убедиться, что это правильный URL, проверив ответ. В целом, от ваших требований пользователя зависит то, что является действительным, а что нет - насколько это безопасно / надежно, зависит от вас. Если у вас есть что-то вроде http://foo.com/?referral=http://bar.com/,, некоторые скрипты сломаются, потому что пользователи не ожидают, что в качестве параметра будет другая комбинация протокола / пути. Кроме того, некоторые другие специальные символы и взломы нулевых байтов, как известно, делали подозрительные вещи с параметрами, но я не думаю, что были какие-либо успешные хаки Regex - возможно, переполнение памяти?
Если это что-то, что должно быть защищено, вероятно, это должно быть обработано на стороне сервера. Хотя вы можете использовать Javascript на стороне сервера, я бы, вероятно, рекомендовал Perl, поскольку он был спроектирован / разработан как текстовый парсер.
Regex только настолько продвинут или ограничен, насколько вы это делаете. Люди логичны, поэтому проблемы, которые они решают, могут быть решены с помощью логического механизма (компьютеров), при условии, что даны точные инструкции (в данном случае шаблон регулярного выражения).
@ Керри:
В Javascript вам не нужно «ставить» / регулярное выражение. Существуют также условия, в которых вы можете поместить его в кавычки: var re = new Regexp("\w+");
Веб-примеры:
Я думаю, что Керри был довольно хорош, хотя я только взглянул на него без проверки, но вот несколько простых примеров, найденных в Интернете
http://www.javascriptkit.com/script/script2/acheck.shtml:
// Email Check
var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
if (filter.test("email address or variable here")){...}
http://snippets.dzone.com/posts/show/452:
// URL Validation
function isUrl(s) {
var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
return regexp.test(s);
}
Наконец, это выглядит многообещающе.
http://www.weberdev.com/get_example-4569.html:
// URL Validation
function isValidURL(url){
var RegExp = /^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/;
if(RegExp.test(url)){
return true;
}else{
return false;
}
}
// Email Validation
function isValidEmail(email){
var RegExp = /^((([a-z]|[0-9]|!|#|$|%|&|'|\*|\+|\-|\/|=|\?|\^|_|`|\{|\||\}|~)+(\.([a-z]|[0-9]|!|#|$|%|&|'|\*|\+|\-|\/|=|\?|\^|_|`|\{|\||\}|~)+)*)@((((([a-z]|[0-9])([a-z]|[0-9]|\-){0,61}([a-z]|[0-9])\.))*([a-z]|[0-9])([a-z]|[0-9]|\-){0,61}([a-z]|[0-9])\.)[\w]{2,4}|(((([0-9]){1,3}\.){3}([0-9]){1,3}))|(\[((([0-9]){1,3}\.){3}([0-9]){1,3})\])))$/
if(RegExp.test(email)){
return true;
}else{
return false;
}
}