删除重音并过滤掉非字母数字字符

时间:2013-12-23 04:55:26

标签: php regex string

如何从字符串中过滤非字母数字字符,但保持重音不变?示例:

$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"

3 个答案:

答案 0 :(得分:4)

你可以试试这个正则表达式:

$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

字符类[^\p{L}\s\p{N}]+表示匹配1个或多个字符

  1. unicode letters
  2. unicode数字
  3. 空间
  4. /u标志用于匹配unicode字母。

答案 1 :(得分:3)

$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

正则表达式说:用任何东西('')替换不是字母字符或数字或空格字符的所有内容。

有用的链接:Unicode character reference

Demo.

答案 2 :(得分:1)

使用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

根据发布:dun

之间没有空格
présentation dun texte avec des accents en français autres