手机、邮箱、用户编码登录
package login;
/**
 * 常量类(改造拉到你自己项目里面)
 *
 * @author ZengWenFeng
 * @date 2023.09.17
 * @email 117791303@qq.com
 * @mobile 13805029595
 */
public class Constant
{
	// 登录界面的登录方式:手机、邮箱、用户名
	public static final String LOGIN_TYPE_MOBILE = "MOBILE";
	public static final String LOGIN_TYPE_EMAIL = "EMAIL";
	public static final String LOGIN_TYPE_USERNAME = "USERNAME";
	
	
	public Constant()
	{
		
	}
}
package login;
/**
 * 用户实体类
 *
 * @author ZengWenFeng
 * @date 2023.09.17
 * @email 117791303@qq.com
 * @mobile 13805029595
 */
public class User
{
	private String id;
	private String usercode;
	private String username;
	private String email;
	private String mobile;
	private String password;
	//手机验证码(放另外一张表)
	//手机验证码生成时间
	//手机验证码结束时间
	public User()
	{
	}
	public User(String id, String usercode, String username, String email, String mobile, String password)
	{
		this.id = id;
		this.usercode = usercode;
		this.username = username;
		this.email = email;
		this.mobile = mobile;
		this.password = password;
	}
	public String getId()
	{
		return id;
	}
	public void setId(String id)
	{
		this.id = id;
	}
	public String getUsername()
	{
		return username;
	}
	public String getUsercode()
	{
		return usercode;
	}
	public void setUsercode(String usercode)
	{
		this.usercode = usercode;
	}
	public void setUsername(String username)
	{
		this.username = username;
	}
	public String getEmail()
	{
		return email;
	}
	public void setEmail(String email)
	{
		this.email = email;
	}
	public String getMobile()
	{
		return mobile;
	}
	public void setMobile(String mobile)
	{
		this.mobile = mobile;
	}
	public String getPassword()
	{
		return password;
	}
	public void setPassword(String password)
	{
		this.password = password;
	}
}package login;
import java.util.ArrayList;
/**
 * 模拟服务端登录服务类(改造拉到你自己项目里面)
 *
 * @author ZengWenFeng
 * @date 2023.09.17
 * @email 117791303@qq.com
 * @mobile 13805029595
 */
public class LoginService
{	
	public LoginService()
	{
		
	}
	// 模拟用户数据库
	private ArrayList<User> listUser = new ArrayList<User>(); 
	// 注册用户
	public void initUser(User user)
	{
		listUser.add(user);
	}
	// 登录方法
	public User login(String identifier, String password)
	{
		String email = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$";
		String moblie = "^[1][34578]\\d{9}$";
		
		//
		User user = null;
		
		// 手机号登录,正常来说,判断手机是没法子用正则,因为手机变化太快了!!
		// 这个地方还是要用界面进来的类型来判断,不然的话
		// 【你如何确定   123 0000 0000 它就一定不是手机号码呢】
		// 【正则表达式有个致命问题,就是一旦变化没法子及时匹配】
		if(identifier.matches(moblie))
		{
			user = getUserByMobile(listUser, identifier);
		}
		// 邮箱登录
		else if(identifier.matches(email))
		{
			user = getUserByEmail(listUser, identifier);
		}
		// 用户名登录
		else
		{
			//如果输入11201234567,识别不到电话号码,就会直接进来
			//这个时候11201234567被当做username去查询肯定为null
			//然而数据库有可能存在User user3 = new User("user3", "user3@example.com", "11201234567", "kissme");
			user = getUserByUsercode(listUser, identifier);
			
			//----------------测试的时候可以注释下面
			if (user == null)
			{
				user = getUserByMobile(listUser, identifier);
			}
			//----------------
		}
		
		
		if (user != null && user.getPassword().equals(password))
		{
			return user;
		}
		else
		{
			return null; // 登录失败
		}
	}
	
	
	public User login2(String type, String identifier, String password)
	{
		//
		User user = null;
		
		// 手机号登录,正常来说,判断手机是没法子用正则,因为手机变化太快了!!
		// 这个地方还是要用界面进来的类型来判断,不然的话
		// 【你如何确定   123 0000 0000 它就一定不是手机号码呢】
		if(type.equals(Constant.LOGIN_TYPE_MOBILE))
		{
			user = getUserByMobile(listUser, identifier);
		}
		// 邮箱登录
		else if(type.equals(Constant.LOGIN_TYPE_EMAIL))
		{
			user = getUserByEmail(listUser, identifier);
		}
		// 用户名登录
		else
		{
			user = getUserByUsercode(listUser, identifier);
		}
		
		
		if (user != null && user.getPassword().equals(password))
		{
			return user;
		}
		else
		{
			return null; // 登录失败
		}
	}
	
	public String getIdByMobile(ArrayList<User> listUser, String identifier)
	{
		return null;
	}
	
	public String getIdByEmail(ArrayList<User> listUser, String identifier)
	{
		return null;
	}
	
	public String getIdByUsername(ArrayList<User> listUser, String identifier)
	{
		return null;
	}
	
	public User getUserByMobile(ArrayList<User> listUser, String identifier)
	{
		for (int i = 0; i < listUser.size(); i++)
		{
			User curUser = listUser.get(i);
			
			if (curUser != null && curUser.getMobile() != null && curUser.getMobile().equals(identifier))
			{
				return curUser;
			}
		}
		
		return null;
	}
	
	public User getUserByEmail(ArrayList<User> listUser, String identifier)
	{
		for (int i = 0; i < listUser.size(); i++)
		{
			User curUser = listUser.get(i);
			
			if (curUser != null && curUser.getEmail() != null && curUser.getEmail().equals(identifier))
			{
				return curUser;
			}
		}
		
		return null;
	}
	
	public User getUserByUsercode(ArrayList<User> listUser, String identifier)
	{
		for (int i = 0; i < listUser.size(); i++)
		{
			User curUser = listUser.get(i);
			
			if (curUser != null && curUser.getUsercode() != null && curUser.getUsercode().equals(identifier))
			{
				return curUser;
			}
		}
		
		return null;
	}
}
package login;
/**
 * 模拟用户界面UI登录
 * 
 * 
 * @author ZengWenFeng
 * @date 2023.09.17
 * @email 117791303@qq.com
 * @mobile 13805029595
 */
public class LoginTest
{
	public LoginTest()
	{
		
	}
	public static void main(String[] args)
	{
		LoginService loginService = new LoginService();
		// 注册一些用户
		User user1 = new User("005126", "user1", "曾大锋", "user1@example.com", "01234567891", "1314");
		User user2 = new User("005127", "user2", "曾二锋", "user2@example.com", "12301234567", "iloveu");
		User user3 = new User("005128", "user3", "曾三锋", "user3@example.com", "11201234567", "kissme");
		User user4 = new User("005129", "user4", "曾小锋", "117791303@qq.com", "13805029595", "kissme");
		loginService.initUser(user1);
		loginService.initUser(user2);
		loginService.initUser(user3);
		loginService.initUser(user4);
		// -----------------
		// --模拟登录
		// 使用手机号、邮箱或用户名登录
		// -----------------
		//email、mobile、username,因为手机号这个变动太大
		
		//【界面操作 1:选择类型 2:输入手机或用户或邮箱 3:输入密码】
		//【简单的问题: 112-0123-4567 开头的11位字符串  算手机号码 还是用户名呢】
		//【简单的问题: 112-0123-4567 假设移动开出的系列号码】
		//【手机号码长度就一定是11位,不会像身份证从15到18】
		String type = "moble";
		type = Constant.LOGIN_TYPE_MOBILE;
		
		String identifier = "13805029595";
		identifier = "11201234567";
		String password = "kissme";
		User loginUser = loginService.login(identifier, password);
		if (loginUser != null)
		{
			System.out.println("登录成功,用户信息:" + loginUser.getUsername());
		}
		else
		{
			System.out.println("登录失败,用户名或密码不正确");
		}
		
		
		loginUser = loginService.login2(type, identifier, password);
		if (loginUser != null)
		{
			System.out.println("登录成功,用户信息:" + loginUser.getUsername());
		}
		else
		{
			System.out.println("登录失败,用户名或密码不正确");
		}
	}
}




最后奖励自己一个【鸡腿】




















