4

我想从字符串的左侧和右侧删除所有非字母数字符号,将那些留在字符串中间。

我在这里问过类似的问题,很好的解决方案是:

$str = preg_replace('/^\W*(.*\w)\W*$/', '$1', $str);

但它确实也删除了一些符号,如 ąĄćĆęĘ 等,它不应该作为它仍然是字母符号。

上面的例子会做:

~~AAA~~  => AAA (OK)
~~AA*AA~~ => AA*AA (OK)
~~ŚAAÓ~~  => AA (BAD)
4

2 回答 2

4

确保u在使用正则表达式时将标志用于 unicode。

以下适用于您的输入:

$str = preg_replace('/^\W*(.*\w)\W*$/u', '$1', '~~ŚAAÓ~~' );

// str = ŚAAÓ

但这不起作用:(不要使用它)

$str = preg_replace('/^\W*(.*\w)\W*$/', '$1', '~~ŚAAÓ~~' );
于 2013-07-04T10:17:58.173 回答
3

您可以传入有效字符列表并告诉函数替换不在该列表中的任何字符:

$str = preg_replace('/[^a-zA-Z0-9*]+/', '', $str);

方括号表示选择此范围内的所有内容。克拉 ( ^) 是 not 的正则表达式。然后我们列出我们的有效字符(小写 a 到 z、大写 a 到 z、从 0 到 9 的数字和一个星号)。方括号末尾的加号表示选择 0 个或多个字符。

编辑:

如果这是您要保留的所有字符的列表,则:

$str = preg_replace('/[^ĄąĆ毿ŹźŃńŁłÓó*]+/', '', $str);

于 2013-07-04T10:10:23.713 回答