0

我有一个 JSON 编码的 PHP 数组:

<script>
var registeredEmails = <?php echo(json_encode($emails)); ?>;
</script>

为了检查这是否有效,我这样做:

console.log(registeredEmails);
// this outputs: ["john@domain.com", "mary@domain.com"]

现在我想遍历那个 JSON 并针对它包含的所有字符串测试某个字符串。

for (var email in registeredEmails) {
    if (registeredEmails.hasOwnProperty(email)) {

        var duplicate = registeredEmails[email];

        console.log(duplicate + ' is typeof: ' + typeof(duplicate));
        // this outputs: john@domain.com is typeof: string

        //  $(this).val() is a string from somewhere else
        if (duplicate.test($(this).val())) {
            // we found a match
        };
    }
}

据我了解,该test()方法测试字符串匹配。我已经测试以确保我的变量duplicate是一个字符串,但显然它仍然是一个对象。我收到以下 JS 错误:

Uncaught TypeError: Object john@domain.com has no method 'test'

这是为什么?

4

2 回答 2

3

test()是 RegEx 对象的方法,而不是 String。

您最好的选择可能是String.search()改用。String.indexOf()如果您不尝试使用正则表达式匹配,您也可以使用。

于 2012-11-01T13:54:01.060 回答
1

尽管您使用的是 json_encode,但您的控制台输出在我看来就像一个数组。如果是这种情况,那么也许您可以使用以下内容:

var found = find_match( registeredEmails, $(this).val() );

if( found ) {
   // found a match
}

function find_match(array, string) {

    for( var i = 0, len = array.length; i < len ; i++ ) {
        if( array[i].indexOf( string ) > -1 ) return true;
    }

    return false;
}​

在这里提琴

于 2012-11-01T14:40:56.450 回答