2012-01-04 2 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'; 

한 단계에서 작업을 수행하려면 ... 뭔가를해야 할 것 : 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

아, 고마워, 한번만 할 수 없다면 이걸로 고수 할거야. 감사! :) – Anonymous

+0

당신은 쉽게 당신을 위해 간단한 기능을 만들 수 있습니다 - 나는 내 대답을 업데이 트됩니다 ... – SpoonNZ

+0

글쎄, 지적 해 주셔서 고마워, 그냥 결국 자신의 기능을 만들어 결국, 당신이 게시물을 편집 할 것이라고 생각하지 않았다 : P 여기 내가 무엇을 가지고 : function u ($ in) {foreach ($ in $ x => $ a) { if (preg_match ('/ [^ \ d \ w \ (\) \ [\] \. \ -] + /', $ a)> 0) return (true);}}; if (u ($ input)) echo '예'; – Anonymous

2

배열과 같은 작업을 수행 할 수 없습니다. the documentation on preg_match()에서 볼 수 있듯이 배열이 아닌 두 번째 매개 변수로 문자열을 사용합니다.

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

대신, 당신은 당신의 조작을하고 싶은 요소를 이야기해야합니다.

배열의 한 요소에만 적용하려면 색인을 사용하십시오. 예 : 당신도

  • 이를 만들 수 있습니다,

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

    당신이 만약 다른 한편으로는 배열의 모든 요소에 그것을 할 : 첫 번째 요소는 $myarray[0] 될 것입니다, 그래서 다음과 같은 작업을해야합니다 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'를 호출하는 것을 잊지 마십시오. 그렇지 않으면 루프는 일치 후에 배열의 나머지 부분을 통과하여 'yes'를 여러 번 쓸 것입니다. – kba

0

당신은 당신의 주제로 배열을 사용할 수 없습니다. 익명 함수 (PHP 5.3 이상)를 사용할 수 있습니다 :

$ret = array_map(function($element) {  
    return preg_replace('/[^\d\w\(\)\[\]\.\-]+/', '', $element) > 0; 
}, $myarray); 
관련 문제