2012-11-01 145 views
0

我有一個JSON編碼的PHP數組:測試對一個字符串/對象

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

要檢查這工作,我這樣做:

console.log(registeredEmails); 
// this outputs: ["[email protected]", "[email protected]"] 

現在我想遍歷那個JSON並且對它包含的所有字符串測試一個特定的字符串。

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

     var duplicate = registeredEmails[email]; 

     console.log(duplicate + ' is typeof: ' + typeof(duplicate)); 
     // this outputs: [email protected] 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 [email protected] has no method 'test' 

爲什麼?

+1

你可能會尋找「string.indexOf(」 stringToFind')== -1'或'/正則表達式模式/.test(string)' –

回答

3

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

您最好的選擇可能是使用String.search()。如果您不嘗試使用正則表達式匹配,您也可以使用String.indexOf()

+0

正是我在找的東西。謝謝! –

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; 
}​ 

小提琴here

+0

這就是我的想法。我有工作,但謝謝你的回答。 +1在任何情況下。 –

相關問題