'/^(?![0-9]+$)(?![a-z]+$)(?![A-Z]+$)(?!([^(0-9a-zA-Z)]|[\(\)])+$)([^(0-9a-zA-Z)]|[\(\)]|[a-z]|[A-Z]|[0-9]){6,20}$/' ]; protected $rule = [ 'channel' => 'require|in:' . UserTerminalEnum::WECHAT_MMP . ',' . UserTerminalEnum::WECHAT_OA . ',' . UserTerminalEnum::H5 . ',' . UserTerminalEnum::PC . ',' . UserTerminalEnum::IOS . ',' . UserTerminalEnum::ANDROID, 'account' => 'require|checkAccount', 'password' => 'require|length:6,20|regex:password', // 'password_confirm' => 'require|confirm' ]; protected $message = [ 'channel.require' => 'network.parameterAbnormality',//注册来源参数缺失 'channel.in' => 'network.parameterAbnormality',//终端参数状态值不正确 'account.require' => 'network.parameterAbnormality', 'password.require' => 'login.passwordEmpty',//请输入密码 'password.length' => 'login.passwordLimit',//密码须在6-20位之间 'password.regex' => 'login.passwordFormatError',//密码须为字母数字组合 'password_confirm.require' => 'login.passwordConfirmEmpty',//请输入确认密码 'password_confirm.confirm' => 'login.twoPasswordError'//两次输入的密码不一致 ]; /** * @notes 校验注册 * @param $buy * @param $rule * @param $data * @return bool|string * @author BD * @date 2024/02/22 10:54 */ protected function checkAccount($account, $rule, $data) { //账号安全机制,连续输错后锁定 $userAccountSafeCache = new UserAccountSafeCache(); if (!$userAccountSafeCache->isSafe()) { return 'network.pwdErrorLimit'; } $login_way = $data['login_way'];//0邮箱1手机号 $mobile_pattern = '/^\d{6,20}$/'; if($login_way == 0){ if(!filter_var($data['account'], FILTER_VALIDATE_EMAIL)){ return 'login.emailError'; } }elseif($login_way == 1){ if(!preg_match($mobile_pattern, $data['account'])){ return 'login.mobileError'; } }else{ return 'network.parameterAbnormality'; } $user = User::where(['account' => $data['account']])->findOrEmpty(); if (!$user->isEmpty()) { $userAccountSafeCache->record(); return 'login.accountExist'; } $userAccountSafeCache->relieve(); return true; } }