2012-01-04 12 views
0

私はここでテストパターンを得ましたが、スペースは許されません。preg_matchは私の配列では動作しません

$myarray[]='s s'; 
if (preg_match('/[^\d\w\(\)\[\]\.\-]+/',$myarray)>0) echo 'yes'; 

これは何もしませんが、

$test='s s'; 
if (preg_match('/[^\d\w\(\)\[\]\.\-]+/',$test)>0) echo 'yes'; 

これは正常に動作します... は、私はそれが私の配列では動作しない理由を理解しませんか?

+1

[docs](http://php.net/manual/en/function.preg-match.php)を見るとこの関数は文字列を件名として受け付けるだけで、それはうまくいきません。P – PeeHaa

+0

preg-matchは配列では機能しません。 –

答えて

1

するpreg_matchは、入力として、配列、ただ一つの文字列を受け付けません。あなたは

$matched = no; 
foreach($myarray as $x) { 
    if (preg_match('/[^\d\w\(\)\[\]\.\-]+/',$x)>0) $matched = true; 
} 
if($matched) echo 'yes'; 

が1つのステップでそれを行うには...のような何かをする必要があるでしょう:preg_matchは文字列のみを受け入れるよう

function preg_match_any($regex,$array) { 
    foreach($array as $x) { 
     if (preg_match($regex,$x)>0) return true; 
    } 
    return false; 
} 

//Then to call it just something like: 
if (preg_match_any('/[^\d\w\(\)\[\]\.\-]+/',$myarray)) echo 'yes'; 
+0

ああ、ありがとう、それは一回の呼び出しで行うことができない場合、私はこの1つに固執すると思います。ありがとう! :) – Anonymous

+0

簡単にあなたのためにこれを行う簡単な関数を作成することができます - 私は私の答えを更新します... – SpoonNZ

+0

ああ、指摘してくれてありがとう、私はちょうどあなた自身のポストを編集するとは思わなかった: function u($ in $ x => $ a){ if(preg_match( '/ [^ \ d \ w \(\)\ [\] \。\ - ] + /'、$ a)> 0)return(true);}}; if(u($ input))echo 'yes'; – Anonymous

2

アレイ上のような操作は実行できません。 the documentation on preg_match()のように、配列ではなく2番目のパラメータとして文字列が使用されます。

int preg_match (string $pattern , string $subject 
     [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]]) 

代わりに、あなたは上の操作をしたい要素にそれを伝える必要があります。

これを配列の1つの要素だけにしたい場合は、そのインデックスを使用してください。例えば。以下は動作するはずですので、最初の要素は、$myarray[0]次のようになります。

if (preg_match('/[^\d\w\(\)\[\]\.\-]+/',$myarray[0])>0) echo 'yes'; 

あなたは一方で、あなたの配列の各要素にそれを行いたい場合、あなたはどちらか

  • 作成することができますforeachループ

    foreach ($myarray as $element) { 
        if (preg_match('/[^\d\w\(\)\[\]\.\-]+/',$element)>0) echo 'yes'; 
    } 
    
  • 使用array_map()とCA llback機能

    function match_callback($element) { 
        if (preg_match('/[^\d\w\(\)\[\]\.\-]+/',$element)>0) echo 'yes'; 
    } 
    array_map('match_callback',$myarray); 
    
+0

ありがとうございました。いずれかの配列要素がパターンに一致します。 – Anonymous

+0

@ user1125062その場合、 'foreach'ループを使用してください。一致するものが見つかった場合は 'break'を呼び出すことを忘れないでください。そうでなければ、ループは一致の後に配列の残りの部分を通過し、おそらく'複数回 'を書きます。 – kba

0

あなたの主題として配列を使用することはできません。匿名関数(PHP 5.3+)を使用することができます:

$ret = array_map(function($element) {  
    return preg_replace('/[^\d\w\(\)\[\]\.\-]+/', '', $element) > 0; 
}, $myarray); 
関連する問題