2013-07-04 55 views
4

我想從字符串的左側和右側刪除所有非字母數字符號,而將字符串中間的字符留下。如何從字符串中修剪特殊字符?

我問過類似的問題here,並很好的解決方案是:

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

但它確實也刪除一些跡象像ąĄćĆęĘ等,它不應該作爲其仍字母標誌。

上面的例子可以這樣做:

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

當你說非字母數字你的意思無非就是其他A-ZA-Z0-9 – DevZer0

回答

4

確保您使用u標誌統一了您在使用正則表達式。

在與您輸入的作品:

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

// str = ŚAAÓ 

但是,這是行不通的:(不使用它)

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

您可以傳遞的有效字符列表,並告訴函數替換不在該列表中的任何字符:

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

的方括號表示選擇此範圍內的所有內容。克拉(^)是沒有的正則表達式。然後列出我們的有效字符(小寫a到z,大寫字母a到z,數字從0到9,以及星號)。方括號末尾的加號表示選擇0個或更多字符。

編輯:

如果這是你想保留的所有字符,然後列表:

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