如何识别locale是在php中的preg_replace?

时间:2009-09-23 16:20:35

标签: php

如果我这样做,preg_replace('/ [^ a-zA-Z0-9 \ s -s -_] /','',$ val)在多语言应用程序中,它会处理像重音字符或俄语字符?如果没有,我如何过滤用户输入以仅允许上述字符但具有区域设置感知?

谢谢!

codecowboy。

2 个答案:

答案 0 :(得分:1)

不,它只匹配ASCII字符A-Z。要匹配任何语言的任何字母/数字,您需要使用unicode properties of the regex engine

preg_replace('/[^\p{L}\p{N}]/', '', $string);

答案 1 :(得分:1)

我能找到的唯一有用的信息来自this page of the manual,其中指出:

  

“单词”字符是任何字母或   数字或下划线字符,   也就是说,任何角色都可以   Perl“word”的一部分。定义   字母和数字的控制   PCRE的字符表,可能会有所不同   如果是特定于语言环境的匹配   地点。例如,在“fr”中   (法语)语言环境,一些字符代码   大于128用于重音   字母,这些字母由\ w。

匹配

尽管如此,我还是不打赌它能按你的意愿运作......

但是,可以肯定:

关于unicode,手册说明了这一点:

  

按Unicode匹配字符   财产不快,因为PCRE有   搜索包含的结构   数据超过一万五千   字符。这就是为什么   传统的逃逸序列如   \ d和\ w不使用Unicode   PCRE中的属性。

所以,它可能是一个更安全的解决方案......对此感到好奇,我应该添加^^