PHP preg_match?如何返回不匹配的字符?

时间:2011-08-02 19:35:48

标签: php preg-match expression

让我们说:

$string = 'qwe1ASD@';

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

现在,有没有简单的解决方案,找到$ string中与表达式不匹配的所有字符?所以作为回报,取代“不好”,我想拥有前任。 “不好。你不能使用以下字符: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).'';
}

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

您可以使用preg_match_all()

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

答案 2 :(得分:1)

$string = 'qwe1ASD@';

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

答案 3 :(得分:0)

有不同的方式。我发现这个很好:

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

if ($check) echo 'BAD ' . $check;

更新:

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