Reg exp to Null / пустая строка, если строка содержит не алфавитно-цифровые символы - PullRequest
2 голосов
/ 04 июля 2010

Я ищу замену php preg на пустую / пустую строку, если строка содержит не алфавитно-цифровые символы или пробелы

например. Строки

$string = "This string is ok";
$string = "Thi$ string is NOT ok, and should be emptied"

Когда я говорю, что опустошен / обнуляется, я имею в виду, что это сделает строку "".

Так что, в принципе, все, что угодно, a-z A-Z 0-9 или пробел в порядке

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 04 июля 2010

Вы можете использовать этот шаблон (обратите внимание на квантификатор притяжений) для сопоставления «недопустимых» строк:

^[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!>' используется для ясности здесь;Вы можете использовать пустую строку '', если это то, что вам нужно.

Ссылки

2 голосов
/ 04 июля 2010
if(preg_match('~[^a-z0-9 ]~i', $str))
      $str = '';
...