Reg exp требуется для замены всех буквенно-цифровых символов с подчеркиванием - PullRequest
6 голосов
/ 12 ноября 2009

Я хочу использовать reg exp для создания SEO-ориентированных URL, поэтому такие вещи, как:

My product name

становится

My_product_name

This is a long,long,long!!sentence

становится

This_is_a_long_long_long_sentence

По сути, все не буквенно-цифровые символы удаляются и заменяются подчеркиванием.

Есть идеи?

Ответы [ 3 ]

21 голосов
/ 12 ноября 2009

preg_replace('/[^a-zA-Z0-9]+/', '_', $sentence)

По сути, он ищет любую последовательность не буквенно-цифровых символов и заменяет ее одним символом '_'. Таким образом, вы также избегаете двух последовательных _ в выходных данных.

Если это для URL, вы, вероятно, также хотите, чтобы они были только в нижнем регистре:

preg_replace('/[^a-z0-9]+/', '_', strtolower($sentence))

5 голосов
/ 12 ноября 2009
 $a = preg_replace("/[^A-Za-z0-9]+/", "_", $str);

или / \ W + /, если вы хотите сохранить все, что считается "буквой" в текущей локали

после замены может также потребоваться указать начальные и конечные подчеркивания

 $a = trim($a, '_');
0 голосов
/ 12 ноября 2009
$str = preg_replace("`[^a-z\d]+`i", "_", $str);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...