PHP 重音字符的正则表达式
PHP Regex for Accented Characters
我尝试过滤允许字母数字、spaces、重音字符和单引号的变量,并将 reste 替换为 space,这样的字符串如下:
substitué à une otage % ? vendredi 23 mars lors de l’attaque
应该输出:
substitué à une otage vendredi 23 mars lors de l’attaque
但我得到的结果是输出:
substitué à une otage vendredi 23 mars lors de l
请帮忙,这是我的代码
$whitelist = "/[^a-zA-Z0-9а-àâáçéèèêëìîíïôòóùûüÂÊÎÔúÛÄËÏÖÜÀÆæÇÉÈŒœÙñý',. ]/";
$descreption = preg_replace($whitelist, ' ', $ds);
}else{
$errors = self::DESCREPTION_ERROR;
return false;
}
你的正则表达式有问题。 а-à
部分给出了错误 Character range is out of order
- 我猜 -
是错误添加的...
然后小提示:’
不是'
[^a-zA-Z0-9àâáçéèèêëìîíïôòóùûüÂÊÎÔúÛÄËÏÖÜÀÆæÇÉÈŒœÙñý'’,. ]
应该可以正常工作。
处理重音字符范围的一种方法是使用 POSIX [:alnum:]
class,它在 PHP 中与 u
修饰符将匹配所有这些。然后可以将其与您要保留的其他字符一起放入否定字符 class 中,以允许删除其他字符:
$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
正如评论中指出的那样,’
与 '
不同,因此还需要将其添加到您要保留的字符集中。
你可以看看Unicode character properties。
我的修改总结:
- 使用
\p{L}
匹配所有字母
- 转义连字符 (
\-
)
- 支持打字机 (
'
) 和排版 (’
) 撇号
结果如下:
$whitelist = '/[^\p{L}0-9\-\'’,. ]/u';
可能还有进一步改进的空间。最后,不要忘记添加 u
modifier!
我尝试过滤允许字母数字、spaces、重音字符和单引号的变量,并将 reste 替换为 space,这样的字符串如下:
substitué à une otage % ? vendredi 23 mars lors de l’attaque
应该输出:
substitué à une otage vendredi 23 mars lors de l’attaque
但我得到的结果是输出:
substitué à une otage vendredi 23 mars lors de l
请帮忙,这是我的代码
$whitelist = "/[^a-zA-Z0-9а-àâáçéèèêëìîíïôòóùûüÂÊÎÔúÛÄËÏÖÜÀÆæÇÉÈŒœÙñý',. ]/";
$descreption = preg_replace($whitelist, ' ', $ds);
}else{
$errors = self::DESCREPTION_ERROR;
return false;
}
你的正则表达式有问题。 а-à
部分给出了错误 Character range is out of order
- 我猜 -
是错误添加的...
然后小提示:’
不是'
[^a-zA-Z0-9àâáçéèèêëìîíïôòóùûüÂÊÎÔúÛÄËÏÖÜÀÆæÇÉÈŒœÙñý'’,. ]
应该可以正常工作。
处理重音字符范围的一种方法是使用 POSIX [:alnum:]
class,它在 PHP 中与 u
修饰符将匹配所有这些。然后可以将其与您要保留的其他字符一起放入否定字符 class 中,以允许删除其他字符:
$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
正如评论中指出的那样,’
与 '
不同,因此还需要将其添加到您要保留的字符集中。
你可以看看Unicode character properties。
我的修改总结:
- 使用
\p{L}
匹配所有字母 - 转义连字符 (
\-
) - 支持打字机 (
'
) 和排版 (’
) 撇号
结果如下:
$whitelist = '/[^\p{L}0-9\-\'’,. ]/u';
可能还有进一步改进的空间。最后,不要忘记添加 u
modifier!