Я пытаюсь использовать RegEX для соответствия шаблону URL. Я нашел ответ здесь: Check if a Javascript string is a urlИспользование RegEX для сопоставления шаблона URL, недопустимый квантификатор?
который указал мне здесь: http://forums.devshed.com/javascript-development-115/regexp-to-match-url-pattern-493764.html
Который дал мне следующий код (вырезать и вставить из devshed сюда и мой сценарий):
function ValidURL(str) {
var pattern = new RegExp('^(https?:\/\/)?'+ // protocol
'((([a-z\d]([a-z\d-]*[a-z\d])*)\.)+[a-z]{2,}|'+ // domain name
'((\d{1,3}\.){3}\d{1,3}))'+ // OR ip (v4) address
'(\:\d+)?(\/[-a-z\d%_.~+]*)*'+ // port and path
'(\?[;&a-z\d%_.~+=-]*)?'+ // query string
'(\#[-a-z\d_]*)?$','i'); // fragment locater
if(!pattern.test(str)) {
alert("Please enter a valid URL.");
return false;
} else {
return true;
}
}
Когда я пытаюсь использовать его в Firefox 4.0, Firebug 1.7.3 дает мне недопустимую ошибку квантора в:
'(\#[-a-z\d_]*)?$','i'); // fragment locater
Есть ли у кого-нибудь идея о том, что может быть проблемой?
Из других запросов на недопустимый квантификатор, я считаю, что * является проблемой, но не уверен, что это может быть. Строка в вопросе, который я использую функцию, когда она дает мне ошибку является:
htp://localhost:1987/
ADDED К.П затруднительным предложил агент-J, по меньшей мере удалена недопустимый вопрос кванторного. пальцы
Однако, это не нравится образец URL выше, когда все сделано правильно:
http://localhost:1987/
вопрос с портом. Когда я удаляю порт #, ему нравится localhost.
Одна из вещей, вам нужно будет указать, что когда вы формируете регулярное выражение из таких строк, вещи, которые вам нужно процитировать, * разные * t han, когда вы создаете регулярное выражение с регулярным синтаксисом регулярного выражения. В частности, вам не нужно «\» перед вашими символами «/», но вы должны * * * * * * * символам перед тем, как «d» или «?». – Pointy
Также номер строки ошибки, вероятно, не интересен, так как фактическая ошибка не будет обнаружена до тех пор, пока не будет вызвана функция «RegExp()», и выражение будет проанализировано. Вероятно, проблема не в том, что последняя часть регулярного выражения. – Pointy
@Pointy, очень хорошая точка об ошибке, не указывая правильное место. –