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()String ではなく、RegEx オブジェクトのメソッドです。

あなたの最善の策は、おそらく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 に答える