개주 훈련일지/🏋️ 전집중 호흡 훈련

정규식

lshfood2 2025. 11. 7. 16:08

View 파트에서사용자의 입력값이

제대로 된 형식인지 아닌지를 판별하기 위해

정규식을 사용할 수 있다.

 

정규식을 사용하기 위해 우선 클래스에서

상수화를 하고 이를 이용한 메서드를 만들어

사용자의 입력값에 대해 오류성 검사를 진행할 수 있다.

 

정규식 상수화

public class View {
	private static Scanner sc = new Scanner(System.in);

	// 정규식 상수 (재사용하기 편하게 선언)
	// ------------------------------	
	private static final String EMAIL_CHECK = "^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+$";
	// 이메일: 간단한 형태 검사용 (실무에서 더 복잡한 패턴을 쓸 수 있음)
        
	private static final String NAME_CHECK = "^[가-힣A-Za-z]{2,20}$";
	// 이름(유저네임): 한글 또는 영문 허용, 길이 2~20자    
    
	private static final String PASSWORD_CHECK = "^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{8,20}$";
	// 비밀번호: 영문자 1개 이상, 숫자 1개 이상 포함, 전체 길이 8~20자
	// (?=.*[A-Za-z]) => 영문자 최소 1개
	// (?=.*\\d)      => 숫자 최소 1개  (주의: Java 문자열에서 '\'는 '\\'로 표기)
	// [A-Za-z\\d]{8,20} => 허용문자(영문+숫자) 길이 8~20
	   
	private static final String UROLE_CHECK = "^(MEMBER|DELETE)$";
	// UROLE: 허용값이 'MEMBER' 또는 'DELETE' 두 가지 뿐
	
	private static final String ADDRESS_CHECK = "^.{5,100}$";
	// 주소: 너무 다양하니 길이만 제한 (최소 5자, 최대 100자)

 

 상수화를 활용한 메서드

private boolean checkEmail(String email) {
//이메일 입력 정규식
	if (email == null) { // null이면 false
	return false;
	}
	// matches로 정규식 검사
	return email.matches(EMAIL_CHECK);
}

public static boolean checkUsername(String username) {
//이름 입력 정규식
	if (username == null) {
	return false;
	}
	return username.matches(NAME_CHECK);
}

public static boolean checkPassword(String password) {
//비밀번호 입력 정규식
	if (password == null) {
	return false;
	}
	return password.matches(PASSWORD_CHECK);
}

public static boolean checkUrole(String urole) {
//회원등급 입력 정규식
	if (urole == null) {
	return false;
	}
	return urole.toUpperCase().matches(UROLE_CHECK);
}

public static boolean checkAddress(String address) {
//배송지 입력 정규식
	if (address == null) {
	return false;
	}
	return address.matches(ADDRESS_CHECK);
}

 

 

메서드를 활용한 유효성 검사

public String inputUpdateEmail() { // 이메일 입력받기
	System.out.println("새 이메일을 입력해주세요: ");
	String email = sc.nextLine();
	while (!checkEmail(email)) { //정규식 메서드 호출
    	//통과하면 T반환하며 반복되지 않는다.
		System.out.println("이메일 형식이 잘못되었습니다. 다시 입력해주세요 : ");
		email = sc.nextLine();
	}
	return email;
}

public String inputUpdateName() { // 변경할 이름 입력받기
	System.out.println("새 이름을 입력해주세요: ");
	String name = sc.nextLine();
	while (checkUsername(name)) {
		System.out.println("입력이 잘못되었습니다. 다시 입력해주세요 : ");
		name = sc.nextLine();
	}
	return name;
}

public String inputUpdateAddress() { // 변경할 배송지 입력받기
	System.out.println("새 배송지를 입력해주세요: ");
	String address = sc.nextLine();
	while (!checkAddress(address)) {
		System.out.println("입력이 잘못되었습니다. 다시 입력해주세요 : ");
		address = sc.nextLine();
	}
	return address;
}