使用或不使用重音检查大小写字符的正则表达式

时间:2010-07-17 11:20:23

标签: php regex web-applications web

如何使以下正则表达式忽略所有空格?

$foo = ereg_replace("[^áéíóúÁÉÍÓÚñÑa-zA-Z]", "", $_REQUEST["bar"]);

输入:IngenieríaEléctrica'*;< 42

当前输出:IngenieríaEléctrica

期望输出:IngenieríaEléctrica

我尝试添加/ s \ s \ s * \ s + / \ s + / / s / t / r等等,但都失败了。

目标:一个正则表达式,只接受包含或不包含(西班牙语)重音的大写或小写字符的字符串。

谢谢!

4 个答案:

答案 0 :(得分:3)

我认为没有理由为什么在正则表达式中添加\s不起作用。 \s应匹配所有空格字符。

$foo = preg_replace("/[^áéíóúÁÉÍÓÚñÑa-zA-Z\s]/", "", $_REQUEST["bar"]);

答案 1 :(得分:0)

我相信这应该有用

$foo = ereg_replace("[^áéíóúÁÉÍÓÚñÑa-zA-Z ]", "", $_REQUEST["bar"]);

答案 2 :(得分:0)

ereg_replace使用POSIX Extended Regular Expressions,然后使用POSIX bracket expressions

现在要知道的重要一点是括号内表达式\ 是一个元字符,因此\s将不起作用。

但是你可以在POSIX括号表达式中使用POSIX字符类[:space:]来达到同样的效果:

$foo = ereg_replace("[^áéíóúÁÉÍÓÚñÑa-zA-Z[:space:]]", "", $_REQUEST["bar"]);

你知道,它与我认为更为人熟知的Perl语法不同,因为在PHP 5.3中不推荐使用POSIX正则表达式函数,你真的应该使用与Perl兼容的函数。

答案 3 :(得分:0)

到目前为止,所有的答案都没有指出你匹配强调字符的方法是黑客而且它是不完整的 - 例如,没有匹配的重音符号。

最好的方法是使用mbstring扩展名:

mb_regex_encoding("UTF-8"); //or whatever encoding you're using
var_dump(mb_ereg_replace("[^\\w\\s]|[0-9]", "", "Ingeniería Eléctrica'*;<42", "z"));

给出

string(22) "Ingeniería Eléctrica"