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