preg_match unicode不适用于某些语言

时间:2013-08-03 21:04:16

标签: php regex unicode internationalization

使用此正则表达式无法验证以下语言的文本:

/^[\p{L}\p{Nd}-_.]{1,20}$/u

不起作用的语言:

Bengali, Gujarati, Hindi, Marathi, Thai, Tamil, Telugu, Vietnamese

与PHP的preg_match一起使用。

我错过了什么?

2 个答案:

答案 0 :(得分:4)

您错误地使用了短划线。如果您希望它与文字短划线字符匹配,则需要将其转义(\-)或将其放在字符类的末尾。

另外,我对这些语言并不熟悉,但我想你可能也需要考虑这些标记:

/^[\p{L}\p{Nd}\p{M}_.-]{1,20}$/u

答案 1 :(得分:0)

问题不是来自你的正则表达式(除了字符-必须始终在字符类的开头或结尾处)。请注意,您的模式可以缩短为:

/^[\w.-]{1,20}$/u

/^[\p{Xan}.-]{1,20}$/u

如果你想删除下划线