Discuz! X3.* 用户名禁用纯数字,只能含有汉字、字母或数字的方法
分类 网站技术/村民张先生 发布于 2017-04-25 21:42
应用场景:如果你的网站开启了手机号码登录支持,为了防止用户名和手机号重复,建议禁止用户注册帐号时使用纯数字作用户名。另外,可禁止用户在用户名中使用标点符号和其它语言字符。
1、打开 source/module/forum/forum_ajax.php 文件,
查找:
showmessage('profile_username_toolong', '', array(), array('handle' => false)); }
在其下方加入本文末尾的代码(如您使用Discuz! UTF-8编码版本,请去掉第一行和最后一行)。
2、打开 source/class/class_member.php 文件,
查找:
showmessage('profile_username_toolong'); }
在其下方加入本文末尾的代码(如您使用Discuz! UTF-8编码版本,请去掉第一行和最后一行)。
以上两个文件均需加入的代码:
$username = mb_convert_encoding($username,"UTF-8","GBK"); $username_rule = "[A-Za-z0-9\x{3007}\x{4e00}-\x{9fa5}]"; //用户名规则 $shuzi = 'QOI\x{3007}\x{4e00}\x{4e8c}\x{4e09}\x{56db}\x{4e94}\x{516d}\x{4e03}\x{516b}\x{4e5d}\x{96f6}\x{58f9}\x{8d30}\x{53c1}\x{5f0e}\x{8086}\x{4f0d}\x{9646}\x{67d2}\x{634c}\x{7396}'; //匹配字母QOI,和〇一二三四五六七八九零壹贰叁弎肆伍陆柒捌玖 if(preg_match('/^[0-9]+$/u', $username)) { showmessage('用户名不能为纯数字', '', array(), array('handle' => false)); } elseif(preg_match('/([0-9'.$shuzi.']{5,})/iu', $username)) { showmessage('用户名不能含有5位以上数字', '', array(), array('handle' => false)); } elseif(!preg_match('/^'.$username_rule.'+$/u', $username)) { $bunengbaohan = mb_convert_encoding(preg_replace("/".$username_rule."/u", "", $username),"GBK","UTF-8"); $bunengbaohan = str_replace(array(" "," ")," 空格 ",$bunengbaohan); showmessage('用户名不能含有 '.$bunengbaohan, '', array(), array('handle' => false)); } $username = mb_convert_encoding($username,"GBK","UTF-8");
欢迎谈谈你的看法(无须登录) *正文中请勿包含"http://"否则将被拦截