Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重音字符的PHP正则表达式_Php_Regex_Preg Replace - Fatal编程技术网

重音字符的PHP正则表达式

重音字符的PHP正则表达式,php,regex,preg-replace,Php,Regex,Preg Replace,我尝试过滤一个允许字母数字、空格、重音字符和单引号的变量,并用空格替换reste,因此字符串如下: 是否有不公平的百分比?vendredi 23 mars lors de l'attaque 应输出: 第23次世界贸易展 但我得到的结果是: 第23次世界大战 请帮忙,这是我的密码 $whitelist = "/[^a-zA-Z0-9а-àâáçéèèêëìîíïôòóùûüÂÊÎÔúÛÄËÏÖÜÀÆæÇÉÈŒœÙñý',. ]/"; $descreption = preg_replace($

我尝试过滤一个允许字母数字、空格、重音字符和单引号的变量,并用空格替换reste,因此字符串如下:

是否有不公平的百分比?vendredi 23 mars lors de l'attaque

应输出:

第23次世界贸易展

但我得到的结果是:

第23次世界大战

请帮忙,这是我的密码

$whitelist = "/[^a-zA-Z0-9а-àâáçéèèêëìîíïôòóùûüÂÊÎÔúÛÄËÏÖÜÀÆæÇÉÈŒœÙñý',. ]/";

$descreption =  preg_replace($whitelist, ' ', $ds);
}else{
    $errors = self::DESCREPTION_ERROR;
    return false;
}

你的正则表达式有问题。部分
а-a
给出了错误
字符范围不符合顺序
-我猜
-
是错误添加到那里的

然后是一个小提示:
'
不是
'

[^a-zA-Z0-9àâáçéèèêëìîíïôòóùûüÂÊÎÔúÛÄËÏÖÜÀÆæÇÉÈŒœÙñý'’,. ] 
应该行得通


另外,如果您使用的是正则表达式,像or这样的工具确实是一件好事。

您的正则表达式有缺陷。部分
а-a
给出了错误
字符范围不符合顺序
-我猜
-
是错误添加到那里的

然后是一个小提示:
'
不是
'

[^a-zA-Z0-9àâáçéèèêëìîíïôòóùûüÂÊÎÔúÛÄËÏÖÜÀÆæÇÉÈŒœÙñý'’,. ] 
应该行得通


另外,如果您使用正则表达式,像or这样的工具确实是一件好事。

处理重音字符范围的一种方法是使用POSIX
[:alnum://code>类,它在PHP中与
u
修饰符结合使用将匹配所有这些字符。然后,可以将其与要保留的其他字符一起放入否定字符类中,以允许删除其他字符:

$string = 'substitué à une otage % ? vendredi 23 mars lors de l’attaque';
echo preg_replace("/[^[:alnum:]'’,.]/u", ' ', $string);
输出:

substitué à une otage vendredi 23 mars lors de l’attaque
正如评论中指出的那样,
'
'
不同,因此它还需要添加到您想要保留的字符集中


处理重音字符范围的一种方法是使用POSIX
[:alnum://code>类,它在PHP中与
u
修饰符一起将匹配所有这些字符。然后,可以将其与要保留的其他字符一起放入否定字符类中,以允许删除其他字符:

$string = 'substitué à une otage % ? vendredi 23 mars lors de l’attaque';
echo preg_replace("/[^[:alnum:]'’,.]/u", ' ', $string);
输出:

substitué à une otage vendredi 23 mars lors de l’attaque
正如评论中指出的那样,
'
'
不同,因此它还需要添加到您想要保留的字符集中

您可以看看

我的更改摘要:

  • 使用
    \p{L}
    匹配所有字母
  • 转义连字符(
    \-
  • 支持打字机(
    )和排版(
    )撇号
结果如下:

$whitelist = '/[^\p{L}0-9\-\'’,. ]/u';
可能还有进一步改进的余地。最后,别忘了添加
u

你可以看看

我的更改摘要:

  • 使用
    \p{L}
    匹配所有字母
  • 转义连字符(
    \-
  • 支持打字机(
    )和排版(
    )撇号
结果如下:

$whitelist = '/[^\p{L}0-9\-\'’,. ]/u';

可能还有进一步改进的余地。最后,别忘了添加
u

取决于编码
/u
通常用于正则表达式的Unicode标志。另外,
是不同的字符。具体取决于编码
/u
通常用于正则表达式的Unicode标志。另外,
是不同的字符。感谢@maio290的回复,但是类似以下字符串:mangin de deux$%#$^%$&^dbd657657*&()*)#+!#@#“/du paysage cultuel actuel.”,它删除了“du paysage cultuel actuel”,这里没有。它在RegExr或regex101上也不匹配。它没有删除±-但就是这样。谢谢@maio290的回复,但是像这样的字符串:mangin de deux$%#$^%$&^dbd657657*&()*)35;+@#“/du paysage cultuel actuel.”,它删除了“du paysage cultuel actuel”,这里没有。它在RegExr或regex101上也不匹配。它没有移除±-但就是这样。