重音字符的PHP正则表达式
我尝试过滤一个允许字母数字、空格、重音字符和单引号的变量,并用空格替换reste,因此字符串如下: 是否有不公平的百分比?vendredi 23 mars lors de l'attaque 应输出: 第23次世界贸易展 但我得到的结果是: 第23次世界大战 请帮忙,这是我的密码重音字符的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($
$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上也不匹配。它没有移除±-但就是这样。