thinkphp自动验证,写验证规则用正则表达式,会出现问题,求大神解答!~

用此正则就可以验证protected$_validate=array(array('Fname','/^\w{2,}$/','用户名格式错误',1,'regex',1),... 用此正则就可以验证
protected $_validate = array(
array('Fname', '/^\w{2,}$/' , '用户名格式错误' , 1 , 'regex' ,1),
);
写成这样就不行
array('Fname', '/^[a-z0-9\u4E00-\u9FFF]{2,20}$/' , '用户名格式错误' , 1 ,'regex', 1),
我下面的正则是正确的,在js里面可以生效
展开
 我来答
songyipangbuo
推荐于2017-11-29 · TA获得超过744个赞
知道小有建树答主
回答量:190
采纳率:100%
帮助的人:256万
展开全部

正确的写法应写为:

protected $_validate = array(

    array('Fname', '/^[a-z0-9\x{4e00}-\x{9fa5}]{2,20}$/u' , '用户名格式错误' , 1 , 'regex' ,1),

);

错误原因:

  1. 可能与编码有关,固使用模式修正符u:

    u (PCRE_UTF8) 
    此修正符启用了一个 PCRE 中与 Perl 不兼容的额外功能。模式字符串被当成 UTF-8。本修正符在 Unix 下自 PHP 4.1.0 起可用,在 win32 下自 PHP 4.2.3 起可用。 

  2. php匹配中文与js有所区别\x后需加大括号,其中\x表示十六进制数据.

其它原因:

  1.  接收的是GB2312的编码格式,如果是接收GB2312的汉字字母数字请替换上面的正则表达式为array('Fname', "/^[".chr(0xa1)."-".chr(0xff)."A-Za-z0-9_]+$/" , '用户名格式错误' , 1 , 'regex' ,1)

aguilaia
2013-09-18 · 超过15用户采纳过TA的回答
知道答主
回答量:104
采纳率:0%
帮助的人:25.8万
展开全部
js 的毕竟不是php的正则,/^[\x{4e00}-\x{9fa5}]{2,20}$/u ,你先本地测试下php能匹配不。。不能匹配就是匹配规则错误
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式