2009-11-29 35 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

相关问题