如果我这样做,preg_replace('/ [^ a-zA-Z0-9 \ s -s -_] /','',$ val)在多语言应用程序中,它会处理像重音字符或俄语字符?如果没有,我如何过滤用户输入以仅允许上述字符但具有区域设置感知?
谢谢!
codecowboy。
答案 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中的属性。
所以,它可能是一个更安全的解决方案......对此感到好奇,我应该添加^^