2011-08-02 8 views
2

내가 가지고 있다고 말할 수 있습니다 :PHP preg_match? 일치하지 않는 문자를 반환하는 방법?

$string = '[email protected]'; 

if(preg_match('/^[a-zA-Z]+$/', $string)) 
{ 
    echo 'OK'; 
} 
else 
{ 
    echo 'BAD'; 
} 

자, 거기에 표현과 일치하지 않는 $ 문자열에서 모든 문자를 찾을 수있는 간단한 해결책은 무엇입니까? 그래서 답례로, "나쁜"대신 나는 전직을 갖고 싶습니다. "나쁜. 다음 문자는 사용할 수 없습니다. 1 @"

간단한 힌트를 미리 보내 주셔서 감사합니다! :)


Floern, 귀하의 답변에 맞는 내 고마워요. 단 하나의 "preg"만 가지고 있으므로 성능면에서도 좋습니다. 다시 감사합니다. 다음과 같이 구현했습니다.

if(preg_match_all('/[^a-zA-Z0-9]/s', $string, $forbidden)) 
{ 
    $forbidden = implode('', array_unique($forbidden[0])); 

    echo 'BAD. Your string contains forbidden characters: '.htmlentities($forbidden).''; 
} 
+0

당신은 뭐죠 받아 들일 수없는 내용의 일반 MSG를 추가 할 수 있습니다

$check = preg_prelace('/[a-zA-Z]/', '', $string); if ($check) echo 'BAD ' . $check; 

UPDATE :이 하나의 좋은를 찾을 수 있습니다. – raym0nd

답변

2

:

if(preg_match_all('/[^a-zA-Z]/s', $string, $matches)){ 
    var_dump($matches); // BAD 
} 
else{ 
    echo 'OK'; 
} 
+0

답장을 보내 주셔서, 이제는 어떤 특정 문자가 일치하는지 알 수 있습니다. – KristCont

4
$tmpstring=preg_replace('~[A-Za-z]~','',$string); 
if(strlen($tmpstring)) 
    //bad chars: $tmpstring 
+0

+1 매우 좋은 접근 –

+0

이것은 ""0 "'에 대해 실패합니다. – Gumbo

+0

@ 검보, 고마워. – RiaD

0

다른 방법이 있습니다. 당신은 preg_match_all()을 사용할 수

if (strlen($check)) echo 'BAD ' . $check; 
+0

이것은 ""0 "'에 대해 실패합니다. – Gumbo

+0

업데이트 이후로 더 이상 없습니다. 그러나이 질문의 일부가 아닙니다 : 문자열이 비어 있는지 확인하는 방법. –

0
$string = '[email protected]'; 

if(preg_match('/^[a-zA-Z]+$/', $string)) 
{ 
    echo 'OK'; 
} 
else 
{ 
    echo 'BAD. You cannot use the following characters: ' + preg_replace('/[a-zA-Z]/', '', $string); 
}