Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php UTF8/多字节'上的正则表达式验证;语言';字符(包括中文等),但不包括特殊字符,如{/*_Php_Regex_Validation_Utf 8_Non Latin - Fatal编程技术网

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

Php UTF8/多字节'上的正则表达式验证;语言';字符(包括中文等),但不包括特殊字符,如{/*,php,regex,validation,utf-8,non-latin,Php,Regex,Validation,Utf 8,Non Latin,使用全部编码为UTF的PHP/MySQL,我们最近不得不开始捕获非拉丁字符,如中文等。我们使用PHP验证来检查字符串长度和字母数字,如: if (!ereg("[[:alnum:]]{2,}",$_POST['company_name'])) { //error code here } 这不适用于多字节字符。我理解长度是一个问题(一个字符不等于一个字节),但我希望有人能提供一个链接/解决方案,用于匹配UTF8语言字符的字符串,但不包括特殊字符,如[*/等 编辑:我只想接受一个xx长的字

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

if (!ereg("[[:alnum:]]{2,}",$_POST['company_name'])) {
    //error code here
}
这不适用于多字节字符。我理解长度是一个问题(一个字符不等于一个字节),但我希望有人能提供一个链接/解决方案,用于匹配UTF8语言字符的字符串,但不包括特殊字符,如
[*/


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

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

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

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

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

来源:

预期的匹配是什么?您想接受这些非拉丁字符吗?目前您似乎正在检查字母数字,因此其他字符将不被接受。我是正则表达式nube,因此请耐心等待!我无法实现此功能,我已尝试使用下面的三个变量,但总是出现错误-请帮助!谢谢$var=”若您是参展商"; // 相同的结果//$var=“test”;//$var=“test{}/'*/-”如果(!preg_match('/^[\p{L}\p{M}\p{Nd}]{2,}$/u',$var)){echo“不仅仅是Unicode语言字符-错误”;@user它可以工作。请参阅此处:确保您的数据实际上是用UTF-8编码的(例如,字符不是用HTML实体编码的)。感谢您的耐心-我相信您的代码可以工作,但是-我在服务器上运行完全相同的代码-使用真正的utf8字符,两个都失败了?“$var fails$var2 fails”-我们有与代码板相同的php版本是否还有其他服务器变量/设置会使您的正则表达式失败?再次感谢您的帮助。@user检查的输出是否相同。刚刚在我们的服务器上运行了完全相同的代码,但两个VAR仍然失败。不想再纠缠您太多建议了?再次感谢