1

我想知道这是否可能。我正在尝试遍历包含正则表达式的对象,如下所示:

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]);
    }
}

我很欣赏澳大利亚和英国的表达方式是相同的价值,但这只是为了证明这个概念。

我匹配的值是 0423887743 并且当我执行以下操作时它可以工作:

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

3 回答 3

2

将其更改为:

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

你有它的方式,它是字符串而不是正则表达式。

于 2013-10-19T05:03:14.633 回答
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);    
于 2013-10-19T05:03:42.330 回答
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);

注意:此代码假定您的格式是字符串,因此您不需要 / 在开头和结尾,如果您需要它们 - 不带引号存储,它将是正则表达式

于 2013-10-19T05:13:16.203 回答