Заменить выбранные символы в строке PHP - PullRequest
1 голос
/ 15 августа 2011

Я знаю, что этот вопрос задавался несколько раз, но у меня есть проблемы с регулярными выражениями ... Итак, вот что (простое), что я хочу сделать в PHP:

Я хочусделать функцию, которая заменяет нежелательные символы строк.Допустимые символы: az AZ 0-9 _ - + () {} # äöü ÄÖÜ пробел

Я хочу, чтобы все остальные символы изменились на "_".Вот пример кода, но я не знаю, что заполнить для ?????:

<?php

// sample strings
$string1 = 'abd92 s_öse';
$string2 = 'ab! sd$ls_o';

// Replace unwanted chars in string by _
$string1 = preg_replace(?????, '_', $string1);
$string2 = preg_replace(?????, '_', $string2);

?>

Вывод должен быть: $ string1: abd92 s_öse (то же самое) $ string2: ab_sd_ls_o

Я смог заставить его работать для аз, 0-9, но было бы неплохо разрешить эти дополнительные символы, особенно äöü.Спасибо за ваш вклад!

Ответы [ 2 ]

2 голосов
/ 15 августа 2011

Чтобы разрешить только те символы, которые вы описали:

 $str = preg_replace("/[^a-zA-Z0-9_+(){}#äöüÄÖÜ -]/", "_", $str);

Чтобы разрешить все пробелы, а не только (пробел) символ:

 $str = preg_replace("/[^a-zA-Z0-9_+(){}#äöüÄÖÜ\s-]/", "_", $str);

Чтобы разрешить буквы из разных алфавитов -- не только конкретные, которые вы упомянули, но и такие вещи, как русский и греческий, или другие типы знаков ударения:

 $str = preg_replace("/[^\w+(){}#\s-]/", "_", $str);

На вашем месте я бы выбрал последний.Он не только короче и легче для чтения, но и менее ограничен, и нет особого преимущества в блокировке таких вещей, как и, если äöüÄÖÜ все в порядке.

1 голос
/ 15 августа 2011

Заменить [^a-zA-Z0-9_\-+(){}#äöüÄÖÜ ] на _.

$string1 = preg_replace('/[^a-zA-Z0-9_\-+(){}#äöüÄÖÜ ]/', '_', $string1);

Заменяет любые символы, кроме символов после ^ в [наборе символов]

Редактировать: избежал - тире.

...