示例页面:实现用户登录注册功能
1) 手机号码格式校验
前端页面发送请求,将手机号码发送到后端,后端对手机格式进行校验
对电话号码,邮箱格式的正则表达式进行封装
package com.jcf.utils;
/**
* @author jcf
*/
public abstract class RegexPatterns {
/**
* 手机号正则
*/
public static final String PHONE_REGEX = "^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\\d{8}$";
/**
* 邮箱正则
*/
public static final String EMAIL_REGEX = "^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$";
/**
* 密码正则。4~32位的字母、数字、下划线
*/
public static final String PASSWORD_REGEX = "^\\w{4,32}$";
/**
* 验证码正则, 6位数字或字母
*/
public static final String VERIFY_CODE_REGEX = "^[a-zA-Z\\d]{6}$";
}
下面是电话号码验证工具类,通过正则表达式实现验证
package com.jcf.utils;
import cn.hutool.core.util.StrUtil;
/**
* @author 虎哥
*/
public class RegexUtils {
/**
* 是否是无效手机格式
* @param phone 要校验的手机号
* @return true:符合,false:不符合
*/
public static boolean isPhoneInvalid(String phone){
return mismatch(phone, RegexPatterns.PHONE_REGEX);
}
/**
* 是否是无效邮箱格式
* @param email 要校验的邮箱
* @return true:符合,false:不符合
*/
public static boolean isEmailInvalid(String email){
return mismatch(email, RegexPatterns.EMAIL_REGEX);
}
/**
* 是否是无效验证码格式
* @param code 要校验的验证码
* @return true:符合,false:不符合
*/
public static boolean isCodeInvalid(String code){
return mismatch(code, RegexPatterns.VERIFY_CODE_REGEX);
}
// 校验是否不符合正则格式
private static boolean mismatch(String str, String regex){
if (StrUtil.isBlank(str)) {
return true;
}
return !str.matches(regex);
}
}
2)生成验证码,将验证码存入session中
@PostMapping("code")
public Result sendCode(@RequestParam("phone") String phone, HttpSession session) {
//验证是否是手机号
if(RegexUtils.isPhoneInvalid(phone)){
return Result.fail("手机号格式错误");
}
// TODO 发送短信验证码并保存验证码
String CheckCode= RandomUtil.randomNumbers(4);
log.info(CheckCode);
session.setAttribute("Code",CheckCode);
return Result.ok("验证码发送成功");
}
3)比对验证码实现登录注册
@PostMapping("/login")
public Result login(@RequestBody LoginFormDTO loginForm, HttpSession session){
// TODO 实现登录功能
//验证手机号码格式是否正确
if (RegexUtils.isPhoneInvalid(loginForm.getPhone())){
return Result.fail("");
}
//验证码校验;
if (!loginForm.getCode().equals(session.getAttribute("Code"))||loginForm.getCode()==null){
return Result.fail("");
}
LambdaQueryWrapper<User> userLambdaQueryWrapper = new LambdaQueryWrapper<>();
userLambdaQueryWrapper.eq(User::getPhone,loginForm.getPhone());
User one = userService.getOne(userLambdaQueryWrapper);
if(one!=null){
return Result.ok();
}
//生成密码将该用户存入数据库中;;;
String password = PasswordEncoder.encode(loginForm.getPassword());
User user = new User();
user.setPhone(loginForm.getPhone());
user.setPassword(password);
userService.save(user);
//将用户实体存入session中
session.setAttribute("user",user);
return Result.ok("");
}
查询数据库,如果存在记录,登陆成功
不存在该用户时,向数据库添加该用户