我在使用php的preg_match时遇到了问题。
我希望我的用户只填写有效字符,例如:不包含数字或特殊字符的名称字段。
我的网站最终将是双语的,但大部分访问者是加拿大法语区的人。
我更喜欢使用utf-8编码。因此,在我的文档顶部,我有这个标签:
<meta charset="utf-8" />
我需要在表单中接受带有重音的字符,我已经尝试过以下方法:
(preg_match('/^\p{L}+$/ui',$string))
但是我无法通过这种方式接受口音。
以下是一个名字可能包含字符的示例:
jean-françois d'abiguäel
这几乎是最糟糕的情况了。
似乎每个人都能够使 (preg_match('/^\p{L}+$/ui',$string))
正常工作,只有我不行。
我需要像这样的东西:
/^\p{L}(\p{L}+[- ']?)*\p{L}$/ui
但我需要让它正常工作。
我的服务器是IIS(godaddy) PHP版本为5.4 默认时区设置为America/Montreal
谢谢!
ini_set('default_charset', 'UTF-8');
。 - Wiktor Stribiżewà
可以是U+0061 + U+0300
(带有重音的基本字母a
),也可以是U+00E0
(带重音的a
)。\p{L}
匹配“字母”,这就是0061和00E0所归类的,而00E0是“标记”,不匹配\p{L}
。由于您的正则表达式只允许“字母”,如果您的字符串是字母+标记,则标记会导致整个字符串不匹配。 - Marc B