정규표현식

전영덕·2023년 2월 2일
0

Java Study

목록 보기
31/36

1. 정규표현식이란?

  • 정규표현식(Regular expression)은 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 '형식언어' 이다.
  • 정규표현식은 많은 텍스트 편집기와 프로그래밍 언어에서 '문자열의 검색과 치환'을 위해 지원하고 있다.

ex) 개발자인 내가 사용자들로부터 ID를 받을 건데 영어랑 숫자로 구성되어있어야해. 한글을 받으면 안돼. 한글은 걸러줄꺼야.
사용자가 아이디를 만들 때, 아이디 비밀번호 이메일 핸드폰번호 등등 많은 데이터를 넘길 것임.
입력 받은 데이터를 검증을 해야할것 아니야? 해서 나온 것.

2. 정규표현식의 사용

boolean java.util.regex.Pattern.matches(
String arg0, CharSequence arg1
};
arg0 : 정규표현식 문자열
arg1 : 형식을 검사받기 위한 내용
즉, 위의 기능 arg1이 arg0의 형식에 맞는지를 검사하고 결과를 booleam으로 리턴한다.

숫자 모양에 대한 형식 검사
"^[0-9]*$"


영문으로만 구성되었는지에 대한 형식 검사
"^[a-zA-Z]*$"


한글로만 구성되었는지에 대한 형식 검사
"^[ㄱ-ㅎ가-힣]*$"

  
영문과 숫자로만 구성되었는지에 대한 형식 검사
"^[a-zA-Z0-9]*$"

  
한글과 숫자로만 구성되었는지에 대한 형식 검사
"^[ㄱ-ㅎ가-힣0-9]*$"

  
이메일 형식인지에 대한 검사. "아이디@도메인"의 형식을 충족해야 한다.
"^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$"

  
"-"없이 핸드폰번호인지에 대한 형식검사.
"^01(?:0|1|[6-9])(?:\\d{3}|\\d{4})\\d{4}$"

  
"-"없이 전화번호인지에 대한 형식검사. 각 부분에 대한 자리수도 충족시켜야 한다.
"^\\d{2,3}\\d{3,4}\\d{4}$"

  
"-"없이 주민번호에 대한 글자수 및 뒷자리 첫글자가 1~4의 범위에 있는지에 대한 검사
"^\\d{6}[1-4]\\d{6}"
  • 간단한 예제
    회원가입시에 입력한 내용을 가장한 변수값들
    String name = "자바학생";
    String age = "19";
    String email = "user@java.net";
    String phone = "01012345678";
    이게 잘 입력되었는지를 확인하고 다음 가입절차로 안내하는 과정만들기.
public class Main01 {
	public static void main(String[] args) {
		// 회원가입시에 입력한 내용을 가장한 변수값들
		String name = "자바학생";
		String age = "19";
		String email = "user@java.net";
		String phone = "01012345678";

		// 한글여부
		boolean isKor = Pattern.matches("^[ㄱ-ㅎ가-힣]*$", name);

		if (!isKor) {
			System.out.println("이름은 한글로만 입력해");
   //이렇게 해도되긴하는데 이게만약 100개가넘어가고그러면 경고문구 100개가 넘을 것이며 
   //이건 너무 개발자 위주의 코딩이다. 사용자 위주로 만들기 위해 실행도중 return 을 넣어서 
   //즉시 중단하는 것을 넣자. 실행 도중 return을 만나면 즉시 중단. void형은 return키워드만 명시한다.
			return;
		}

		// 숫자여부
		boolean isNum = Pattern.matches("^[0-9]*$", age);
		if (!isNum) {
			System.out.println("나이는 숫자로만 입력해");
			return;
		}

		// 이메일 검사
		boolean isEmail = Pattern.matches("^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$", email);
		if (!isEmail) {
			System.out.println("이메일 좀 똑바로 입력해");
			return;
		}

		// 핸드폰 반호 검사
		boolean isPhone = Pattern.matches("^01(?:0|1|[6-9])(?:\\d{3}|\\d{4})\\d{4}$", phone);
		if (!isPhone) {
			System.out.println("폰번호 좀 똑바로 입력해");
			return;
		}

		System.out.println("회원 가입 절차를 진행합니다");
	}
}
  • 간단한 예제2
    이름, 나이, 이메일, 전화번호를 입력받고 RegexHelper를 이용한 validation check하는 회원가입 절차 작성. 즉 RegexHelper를 이용한 validation check라는 클래스를 따로 만들고 import하자.
package study.java.helper;
import java.util.regex.Pattern;
public class RegexHelper2 {
	// 싱글톤 객체
	private static RegexHelper2 current;
    
	public static RegexHelper2 getInstance() {
		if (current == null) {
			current = new RegexHelper2();
		}
		return current;
	}

	public static void freeInstance() {
		current = null;
	}
	private RegexHelper2() {
	};
	// 싱글톤 객체를 생성하기 위한 준비 끝

	// 회원가입 validation check 기능
	// 주어진 문자열이 공백이거나 null인지를 검사
	// @param x 검사할 문자열
	// @return boolean 공백, null이 아닐 경우 true리턴

	public boolean isValue(String str) {
		boolean result = false;
		if (str != null) {
			result = !(str.trim()).equals("");
		}
		return result;
	}

	public boolean isName(String str) {
		boolean result = false;
		if (isValue(str)) {
			result = Pattern.matches("^[ㄱ-ㅎ가-힣]*$", str);
		}
		return result;
	}

	public boolean isAge(String str) {
		boolean result = false;
		if (isValue(str)) {
			result = Pattern.matches("^[0-9]*$", str);
		}
		return result;
	}

	public boolean isEmail(String str) {
		boolean result = false;
		if (isValue(str)) {
			result = Pattern.matches("^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$",
					str);
		}
		return result;
	}

	public boolean isPhoneNumber(String str) {
		boolean result = false;
		if (isValue(str)) {
			result = Pattern.matches("^01(?:0|1|[6-9])(?:\\d{3}|\\d{4})\\d{4}$", str);
		}
		return result;
	}
}

//이제 메인메서드에서 값을 받고 구현하자.
package patternChecker;
import study.java.helper.RegexHelper2;
public class Main2_2 {
	public static void main(String[] args) {

		// 이름, 나이, 이메일, 전화번호를 입력받고 RegexHelper를 이용한 validation check하는 회원가입 절차 작성

		String name = "자바학생";
		String age = "19";
		String email = "user@java.net";
		String phone = "01012345678";
		
		RegexHelper2 r = RegexHelper2.getInstance();

		// 이름 한글여부
		if (!r.isName(name)) {
			System.out.println("이름은 한글로만 입력해");
			return;
		}

		// 나이 숫자여부
		if (!r.isAge(age)) {
			System.out.println("나이는 숫자로만 입력해");
			return;
		}

		// 이메일 검사
		if (!r.isEmail(email)) {
			System.out.println("이메일 좀 똑바로 입력해");
			return;
		}

		// 핸드폰 반호 검사
		if (!r.isPhoneNumber(phone)) {
			System.out.println("폰번호 좀 똑바로 입력해");
			return;
		}

		System.out.println("제대로 했네	");
		System.out.println("회원가입 절차를 시작합니다");
	}

}

0개의 댓글