我知道这个问题已被多次询问过,但我的正则表达式存在问题......所以这是我想用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但是允许那些额外的角色会很好,特别是äöü。感谢您的投入!
答案 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);
这将替换除[字符集]
中^
之后的字符以外的任何字符
修改:转发了-
短划线。