UTF8 /多字节'语言'字符(包括中文等)的正则表达式验证,但不是{/ *等特殊字符

时间:2010-08-26 11:31:55

标签: php regex validation utf-8 non-latin

使用PHP / MySQL全部编码为UTF,我们最近不得不开始捕获非拉丁字符,例如中文等。我们有PHP验证,检查字符串长度和字母数字,如:

if (!ereg("[[:alnum:]]{2,}",$_POST['company_name'])) {
    //error code here
}

这不适用于多字节字符。我理解长度是一个问题(一个字符不等于一个字节)但我希望有人能提供链接/解决方案来匹配UTF8语言字符的字符串只有[*/等特殊字符

编辑:我只想接受一个xx长的字符串,只包含英文/中文等语言字符,而不是任何特殊字符*{/等。希望澄清。

3 个答案:

答案 0 :(得分:1)

您的要求有点模糊,但您只能强制执行字母(可能与标记结合使用)和十进制数字

if (!preg_match('/^[\p{L}\p{M}\p{Nd}]{2,}$/u', $_POST['company_name'])) {
   //error here
}

答案 1 :(得分:0)

PHP的 mbstring 扩展名有一个mb_ereg()函数,我想这可能是一个很好的起点。

答案 2 :(得分:0)

您可以尝试与\p{L}|\p{N}匹配,但需要在正则表达式中添加u选项。

来源:
www.regular-expressions.info