我想从字符串的左侧和右侧删除所有非字母数字符号,将其留在字符串的中间。
我问了类似的问题here,好的解决方案是:
$str = preg_replace('/^\W*(.*\w)\W*$/', '$1', $str);
但它确实删除了一些像ĄćĆĆ等等的标志,它不应该作为其仍然按字母顺序排列的标志。
以上示例可以:
~~AAA~~ => AAA (OK)
~~AA*AA~~ => AA*AA (OK)
~~ŚAAÓ~~ => AA (BAD)
答案 0 :(得分:4)
确保在使用正则表达式时使用u
标记用于unicode。
以下处理您的输入:
$str = preg_replace('/^\W*(.*\w)\W*$/u', '$1', '~~ŚAAÓ~~' );
// str = ŚAAÓ
但这不起作用:(不要使用它)
$str = preg_replace('/^\W*(.*\w)\W*$/', '$1', '~~ŚAAÓ~~' );
答案 1 :(得分:3)
您可以传入有效字符列表并告诉该函数替换该列表中不存在的任何字符:
$str = preg_replace('/[^a-zA-Z0-9*]+/', '', $str);
方括号表示选择此范围内的所有内容。克拉(^
)是不是的正则表达式。然后我们列出我们的有效字符(小写字母a到z,大写字母a到z,数字从0到9,以及星号)。方括号末尾的加号表示选择0个或更多字符。
编辑:
如果这是您要保留的所有字符的列表,则:
$str = preg_replace('/[^ĄąĆ毿ŹźŃńŁłÓó*]+/', '', $str);