如何过滤字符串中的非字母数字字符,但不改变重音符号?删除重音符号并过滤掉非字母数字字符
例如:
$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