PHP preg_match?Как вернуть не совпадающие символы? - PullRequest
2 голосов
/ 02 августа 2011

Допустим, у меня есть:

$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).'';
}

Ответы [ 4 ]

4 голосов
/ 02 августа 2011
$tmpstring=preg_replace('~[A-Za-z]~','',$string);
if(strlen($tmpstring))
    //bad chars: $tmpstring
2 голосов
/ 02 августа 2011

Вы можете использовать preg_match_all():

if(preg_match_all('/[^a-zA-Z]/s', $string, $matches)){
    var_dump($matches); // BAD
}
else{
    echo 'OK';
}
1 голос
/ 02 августа 2011
$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);
}
0 голосов
/ 02 августа 2011

Есть разные способы. Я нахожу это хорошим:

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

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

UPDATE:

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