Как решить ошибку «недопустимый квантификатор» с помощью регулярного выражения в JavaScript? - PullRequest
2 голосов
/ 30 ноября 2009

Я пытаюсь перенести следующую функцию проверки URL из моего кода PHP в код JavaScript:

   this.validate_url = function(field)
    {
        var pattern = new RegExp("^((ht|f)tp(s?)\:\/\/|~/|/)?([\w]+:\w+@)?([a-zA-Z]{1}([\w\-]+\.)+([\w]{2,5}))(:[\d]{1,5})?((/?\w+/)+|/?)(\w+\.[\w]{3,4})?((\?\w+=\w+)?(&\w+=\w+)*)?");
        var val = $("#" + field).val();

        return pattern.test(val);
    }

И это дает мне ошибку:

invalid quantifier ?w+=w+)?(&w+=w+)*)?

Как я могу это исправить?

Ответы [ 2 ]

4 голосов
/ 30 ноября 2009

Вам также нужно экранировать обратную косую черту в объявлении строки:

var pattern = new RegExp("^((ht|f)tp(s?)://|~/|/)?(\\w+:\\w+@)?([a-zA-Z]{1}([\\w-]+\\.)+(\\w{2,5}))(:\\d{1,5})?((/?\\w+/)+|/?)(\\w+\\.\\w{3,4})?((\\?\\w+=\\w+)?(&\\w+=\\w+)*)?");

Или вы используете буквенный синтаксис регулярного выражения /expr/flags

var pattern = /^((ht|f)tp(s?):\/\/|~\/|\/)?(\w+:\w+@)?([a-zA-Z]{1}([\w-]+\.)+(\w{2,5}))(:\d{1,5})?((\/?\w+\/)+|\/?)(\w+\.\w{3,4})?((\?\w+=\w+)?(&\w+=\w+)*)?/;

Вы также должны попытаться использовать группы без захвата (?:expr) там, где вы не не нужно ссылаться на совпадение этих групп.

3 голосов
/ 30 ноября 2009

Поскольку обратная косая черта является экранирующим символом в JavaScript, вам нужно будет экранировать это , чтобы записать его в строку:

var pattern = new RegExp("^((ht|f)tp(s?)\\:\\/\\/|~/|/)?([\\w]+:\\w+@)?([a-zA-Z]{1}([\\w\\-]+\\.)+([\\w]{2,5}))(:[\\d]{1,5})?((/?\\w+/)+|/?)(\\w+\\.[\\w]{3,4})?((\\?\\w+=\\w+)?(&\\w+=\\w+)*)?");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...