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

PHP预赛?如何返回不匹配的字符?,php,preg-match,expression,Php,Preg Match,Expression,假设我有: $string = 'qwe1ASD@'; if(preg_match('/^[a-zA-Z]+$/', $string)) { echo 'OK'; } else { echo 'BAD'; } 现在,有没有简单的解决方案,从$string中查找与表达式不匹配的所有字符?因此作为回报,我想用“坏”来代替“坏”。你不能使用以下字符:1@“ 提前感谢您提供的任何简单提示!:) 谢谢你,弗洛恩,你的回答最符合我的需要。它只有一个“preg”,所以它的性能也很好。再次

假设我有:

$string = 'qwe1ASD@';

if(preg_match('/^[a-zA-Z]+$/', $string))
{
    echo 'OK';
}
else
{
    echo 'BAD';
}
现在,有没有简单的解决方案,从$string中查找与表达式不匹配的所有字符?因此作为回报,我想用“坏”来代替“坏”。你不能使用以下字符:1@“

提前感谢您提供的任何简单提示!:)


谢谢你,弗洛恩,你的回答最符合我的需要。它只有一个“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).'';
}

有不同的方法。我觉得这个很好:

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

if ($check) echo 'BAD ' . $check;
更新:

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

您可以使用
preg\u match\u all()


您可以添加一个通用消息,说明什么是不可接受的。因为更新不再是因为。但是,这并不是问题的一部分:如何检查字符串是否为空。多亏了您的回答,现在我知道了匹配的特定字符。
if (strlen($check)) echo 'BAD ' . $check;
$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);
}
if(preg_match_all('/[^a-zA-Z]/s', $string, $matches)){
    var_dump($matches); // BAD
}
else{
    echo 'OK';
}