удалить все странные символы строки - PullRequest
1 голос
/ 18 ноября 2010

Я пытаюсь создать слизняка, поэтому я хотел бы убрать всех странных персонажей. Единственное, что должен содержать слизень, это строчные буквы и подчеркивания. Есть ли способ проверить наличие странных символов и отфильтровать строку? все, что не является символом или подчеркиванием, должно быть удалено

вот что у меня есть:

if(!preg_match_all('/[a-z]/')):
    $output = preg_replace("/ ... euhm ... /", "", $slug2);
else:
    $output = $slug2;
endif;

Я должен пойти из этого: Создать 3D эффект обтекания ленты (плюс бесплатный PSD!)

к этому: create_a_3d_ribbon_wrap_around_effect_plus_a_free_psd

Ответы [ 3 ]

3 голосов
/ 18 ноября 2010
$slug = strtolower($slug);
$slug = str_replace(" ", "_", $slug);
$slug = preg_replace("/[^a-z0-9_]/", "", $slug);
1 голос
/ 18 ноября 2010

Нет необходимости в начальном матче.Вы можете сделать безусловный поиск и замену.Если заменить нечего, ничего страшного.Здесь это как одна большая цепочка вызовов функций:

$slug = trim(preg_replace('/[\W_]+/', '_', strtolower($slug)), '_');

Или разделены на отдельные строки:

$slug = strlower($slug);
$slug = preg_replace('/[\W_]+/', '_', $slug);
$slug = trim($slug, '_');

Объяснение:

  1. Преобразовать верхний регистр встрочные буквы strtolower.
  2. Поиск \W и _.Символ «слово» - это буква, цифра или знак подчеркивания.Символ «не-слово» противоположен этому, то есть пробел, пунктуация и управляющие символы.\W соответствует "несловесным" символам.
  3. Замените эти плохие символы подчеркиванием.Если в строке более одного, все они будут заменены одним подчеркиванием.
  4. Подчеркивание подчеркивания в начале и конце строки.

Код на сложномсторона, потому что есть несколько сложных случаев, которые нужно обработать:

  • Плохие символы на концах должны быть удалены, а не преобразованы в подчеркивание.Например, !) в вашем примере.
  • Мы хотим, чтобы foo_-_bar превратился в foo_bar, а не foo___bar.Подчеркивание должно быть свернуто, в основном.
0 голосов
/ 18 ноября 2010
$slug = preg_replace("[^a-z_]", "", $slug);
...