4

我正在验证我的评论脚本,我需要删除所有非字母数字字符,除了在西欧使用的字符。

我的计划是用正则表达式输出所有非字母数字字符:

preg_replace("/[^A-Za-z0-9 ]/", '', $string);

但到目前为止,所有欧洲字符和一个£符号都被去掉了,所以“Café Rouge”变成了“Caf Rouge”。

如何将一组欧元字符添加到上述正则表达式中。

数组是:

£, €, 
á, à, â, ä, æ, ã, å,
è, é, ê, ë,
î, ï, í, ì,
ô, ö, ò, ó, ø, õ,
û, ü, ù, ú,
ÿ,
ñ,
ß

我使用 UTF-8

解决方案:

$comment = preg_replace('/[^\p{Latin}\d\s\p{P}]/u', '', $comment);

$name = preg_replace('/[^\p{Latin}]/u', '', $name);

$name aslo 删除标点符号和空格

感谢您的快速回复

4

2 回答 2

12
preg_replace('/[^\p{Latin}\d ]/u', '', $str);
于 2012-11-27T13:37:21.887 回答
0
echo preg_replace('/[^A-Z0-9 £€áàâä...]/ui', '', $string);

重要的部分是/u旗帜。确保您的源代码$string是 UTF-8 编码的。

我仍然认为这是错误的方法,因为它严重限制了您的用户可以输入的内容,并且惹恼一些人,但是无论您的船是什么...顺便说一句,您的列表不包含标点符号。

于 2012-11-27T13:24:23.610 回答