проблема с проверкой URL бритвы MVC и JQuery - PullRequest
0 голосов
/ 31 января 2012

Я работаю над MVC Razor. У меня проблема с проверкой валидации URL.

Мне нужно выполнить проверку URL перед вставкой во временную базу данных.

Я получил ссылку http://www.regxlib.com/Search.aspx?k=&c=2&m=-1&ps=20

и нашел один хороший шаблон проверки,

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

Пока я работаю в режиме MVC, он выдает ошибку, поэтому я должен изменить его на

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

т.е.

@@ вместо @

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

Но в консоли я получил ошибку

enter image description here

Может кто-нибудь сказать мне, что с этим не так, поэтому получил ошибку,

«недопустимый диапазон в классе символов»

1 Ответ

2 голосов
/ 31 января 2012

Самый простой способ исправить это: в валидаторе javascript удалите new RegExp(), а также кавычки и добавьте косую черту в начале и конце, указывая литерал регулярного выражения.Поскольку ваше регулярное выражение находится в строке, «\» интерпретируется как escape-строка, а не как escape-выражение, что означает, что все символы «\» будут удалены.Вы избегаете этого, не используя строку, но используя литерал регулярного выражения javascript:

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

Если при создании выражения с помощью RegExp () вам придется использовать \\ в каждом месте, где встречается \.

Как уже упоминалось в комментарии, замените два & на & (двойное кодирование HTML на сервере, с которого вы получили регулярное выражение).Они не ошибаются в синтаксисе Regex, но они делают выражение допустимым для ;, что недопустимо в URL.

Обновление / объяснение

Фактическое значение ошибки состоит в том, что, поскольку javascript игнорирует все обратные слеши в строке при создании окончательного регулярного выражения, он превращается в:

/(http|ftp|https)://[w-_]+(.[w-_]+)+([w-.,@?^=%&:/~+#]*[w-@?^=%&/~+#])?/
  • Исходный [\w\-_] означает «соответствовать любому слову».(буквенно-цифровой) символ, дефис или знак подчеркивания ".
  • [w-_] означает" сопоставить любой символ между "w" и "_".

Но на самом деле "w" встречается после"_" (посмотрите таблицу символов ASCII / UTF-8), означая, что это недопустимый диапазон в классе символов ("символьный класс" = "коллекция символов для соответствия ")

...