2009-11-29 34 views
1

我想從我的PHP代碼轉移下列URL驗證功能,以我的javascript代碼:如何解決JavaScript中的正則表達式「無效量詞」錯誤?

this.validate_url = function(field) 
    { 
     var pattern = new RegExp("^((ht|f)tp(s?)\:\/\/|~/|/)?([\w]+:\[email protected])?([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+)*)? 

我怎樣才能解決這個問題?

回答

3

由於反斜槓是JavaScript中的轉義字符,你必須逃離這它寫在一個字符串:

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

如果只有本機正則表達式語法('/ re /')支持某種插值... – 2016-04-04 12:45:57

4

您也需要到字符串聲明中逃脫反斜線:

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

或者你使用regular expression literal syntax /expr/flags

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

您還應該嘗試使用non-capturing groups (?:expr),您不需要引用該組的匹配。

+0

+1以使用字面語法。它避免了(某些)逃跑的痛苦 – Matt 2009-11-29 22:38:42

相關問題