Вы можете использовать этот шаблон (обратите внимание на квантификатор притяжений) для сопоставления «недопустимых» строк:
^[a-zA-Z0-9 ]*+.+$
Вот фрагмент:
<?php
$test = array(
"This string is ok",
"Thi$ string is NOT ok, and should be emptied",
"No way!!!",
"YES YES YES"
);
foreach ($test as $str) {
echo preg_replace('/^[a-zA-Z0-9 ]*+.+$/', '<censored!>', $str)."\n";
}
?>
Приведенные выше отпечатки (как видно на ideone.com ):
This string is ok
<censored!>
<censored!>
YES YES YES
Он работает с использованием притяжательного повторения (то есть без возврата), чтобы сопоставить как можно больше действительных символов с [a-zA-Z0-9 ]*+
.Если после этого что-то осталось, то есть .+
совпадений, то мы, должно быть, застряли на недопустимом символе, поэтому вся строка сопоставляется (и, следовательно, заменяется).В противном случае строка остается нетронутой.
Строка '<censored!>'
используется для ясности здесь;Вы можете использовать пустую строку ''
, если это то, что вам нужно.
Ссылки