Самый простой способ исправить это: в валидаторе 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), означая, что это недопустимый диапазон в классе символов ("символьный класс" = "коллекция символов для соответствия ")