如何過濾字符串中的非字母數字字符,但不改變重音符號?刪除重音符號並過濾掉非字母數字字符
例如:
$string = "présentation d'un texte, avec des accents (en français!) & autres..."
應改爲:
$string = "présentation dun texte avec des accents en français autres"
如何過濾字符串中的非字母數字字符,但不改變重音符號?刪除重音符號並過濾掉非字母數字字符
例如:
$string = "présentation d'un texte, avec des accents (en français!) & autres..."
應改爲:
$string = "présentation dun texte avec des accents en français autres"
你可以試試這個正則表達式:
$str = "présentation d'un texte, avec des accents (en français!) & autres...";
echo preg_replace('/[^\p{L}\s\p{N}]+/u', '', $str);
//=> présentation dun texte avec des accents en français autres
Character類[^\p{L}\s\p{N}]+
意味着匹配1個或多個字符的是NOT:
/u
標誌是匹配Unicode字母。
$string = "présentation d'un texte, avec des accents (en français!) & autres...";
echo preg_replace('%[^\p{L}\s\p{N}]++%u', '', $string);
輸出:
présentation dun texte avec des accents en français autres
說明:
\p{L}
- 所有字母\p{N}
- 所有數字u
- 治療模式字符串爲UTF- 8正則表達式:將所有不是字母字符或數字或空白字符替換爲空(''
)。
根據OP'd'un'需要變成'dun'而不是'd un' – anubhava
@anubhava:啊,我錯過了。謝謝,我現在已經更新了答案。 :) –
@anubhava:我沒有複製你的答案。我實際上使用[這個答案](http://stackoverflow.com/a/16427088/1438393)作爲參考,但沒有注意到之前[你評論](http:// stackoverflow)之前'd'和'un'之間的空格。COM /問題/ 20737183 /刪除,口音和過濾出,非字母數字,字符/ 20737282#comment31071969_20737282)。我無法找到一種更清潔的方式來避開這個空間並使用'\ s'。儘管如此,我已經爲你成爲第一個解決這個問題的人提供了讚賞。乾杯:) –
測試使用PHP版本5.4.20和PHP版本5.2.3-20070601
<?php
$text = "présentation d'un texte, avec des accents (en français!) & autres...";
$new = preg_replace("/[^a-zA-ZÀ-ÿ ]/", '', $text);
echo $new;
?>
會產生présentation dun texte avec des accents en français autres
按貼:在d
和un
之間沒有空格
présentation dun texte avec des accents en français autres
谷歌搜索我的問題。沒有找到解決方案。 – libertaire
沒有狗屎sherlock。我試過閱讀手冊,我吮吸正則表達式。我可以找到如何過濾字母數字字符但不是重音。你的回覆是無用的。 – libertaire