替换PHP字符串中的选定字符

时间:2011-08-15 15:40:15

标签: php regex preg-match character

我知道这个问题已被多次询问过,但我的正则表达式存在问题......所以这是我想用PHP做的(简单)事情:

我想创建一个替换不需要的字符串字符的函数。接受的字符应为: a-z A-Z 0-9 _ - +(){}#äöüÄÖÜspace

我希望所有其他字符都变为“_”。这里有一些示例代码,但我不知道为?????填写什么:

<?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:abd92s_öse(相同) $ string2:ab_ sd_ls_o

我能够让它适用于a-z,0-9但是允许那些额外的角色会很好,特别是äöü。感谢您的投入!

2 个答案:

答案 0 :(得分:2)

仅允许您描述的确切字符:

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

允许所有空格,而不仅仅是(空格)字符:

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

允许来自不同字母的字母 - 不仅是您提到的特定字母,还包括俄语和希腊语或其他类型的重音符号:

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

如果我是你,我会选择最后一个。它不仅更短更容易阅读,而且限制性更小,如果и完全正常,阻止äöüÄÖÜ之类的内容也没有特别的优势。

答案 1 :(得分:1)

[^a-zA-Z0-9_\-+(){}#äöüÄÖÜ ]替换为_

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

这将替换除[字符集]

^之后的字符以外的任何字符

修改:转发了-短划线。