Php UTF8/多字节'上的正则表达式验证;语言';字符(包括中文等),但不包括特殊字符,如{/*
使用全部编码为UTF的PHP/MySQL,我们最近不得不开始捕获非拉丁字符,如中文等。我们使用PHP验证来检查字符串长度和字母数字,如: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长的字
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仍然失败。不想再纠缠您太多建议了?再次感谢