2013-10-19 112 views
1

我想知道這是否可能。我想正則表達式包含表達式對象遍歷如下:迭代包含正則表達式的javascript對象變量

var formats = { 
    AUS:"/^\D*0(\D*\d){9}\D*$/", 
    UK: "/^\D*0(\D*\d){9}\D*$/" 
     }; 

    var matched = false; 

for (var i in formats) { 
    if (!matched) { 
     var format = formats[i]; 
     matched = value.match(formats[i]); 
    } 
} 

我很欣賞這兩個AUS &英國表達式的值相同,但是這僅僅是爲了證明這個概念。

我的價值匹配是0423887743,當我做了以下工作原理:

value.match(/^\D*0(\D*\d){9}\D*$/); 

回答

2

將其更改爲:

var formats = { 
    AUS:/^\D*0(\D*\d){9}\D*$/, 
    UK: /^\D*0(\D*\d){9}\D*$/ 
}; 

你有它的方式,它的字符串不是正則表達式。

1

string.match以正則表達式作爲參數,但傳遞的是字符串。

您可以存儲在您的對象的正則表達式:

var formats = { 
    AUS: /^\D*0(\D*\d){9}\D*$/, 
    UK: /^\D*0(\D*\d){9}\D*$/ 
     }; 

或者創建正則表達式從字符串:

var format = new RegExp(formats[i]); 
matched = value.match(format);  
1

我不知道你爲什麼需要這麼奇怪的正則表達式,這裏是工作代碼:

var formats = { 
AUS:"^0[0-9]{9}$", 
UK: "^0[0-9]{9}$" 
}; 

var matched = false; 
var value = '0423887743'; 
for (var i in formats) { 
    if (!matched) { 
     var format = formats[i]; 
     var re = new RegExp(formats[i]); 
     matched = (re.exec(''+value) != null); 
    } 
} 
alert(matched); 

注意:此代碼假設您的格式是字符串,所以你不需要/在開始和結束,如果你需要它們 - 沒有引號存儲,它將是正則表達式

相關問題