정규 표현식

치로·2024년 7월 24일

1. 정규 표현식이란?

: 정규 표현식(Regular experssion)은 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 '형식언어'이다

  • 정규표현식은 많은 텍스트 편집기와 프로그래밍 언어에서 '문자열의 검색과 치환'을 위해 지원하고 있음
    boolean java.utile.regex.Pattern.matches(
    String arg0, CharSequence arg1
    );
    - arg0 : 정규표현식 문자열
    - arg1 : 형식을 검사받기 위한 내용



  • 숫자 모양에 대한 형식 검사 : "^[0-9]*$"
  • 영문으로만 구성되었는지에 대한 형식 검사 : "^[a-zA-Z]*$"
  • 한글로만 구성되었는지에 대한 형식 검사 : "^[ㄱ-ㅎ가-힣]*$"
  • 영문과 숫자로만 구성되었는지에 대한 형식 검사 : "^[a-zA-Z0-9]*$"
  • 한글과 숫자로만 구성되었는지에 대한 형식 검사 : "^[ㄱ-ㅎ가-힣0-9]*$"
  • 이메일 형식인지에 대한 검사 (아이디@도메인"의 형식을 충족) : "^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}"
  • 블로그 주소 : https://hamait.tistory.com/342

예시 코드

package study.java.helper;

import java.util.regex.Pattern;

public class RegexHelper {
		//---싱글톤 객체 생성---
		private static RegexHelper current;
	
		public static RegexHelper getInstance() {
			if(current == null) {
				current = new RegexHelper();
			}
			return current;
		}
		public static void freeInstance () {
			current = null;
		}	
		private RegexHelper() {
		}	
		//---생글톤 객체 생성 끝---
		
		// 주어진 문자열이 공백이거나 null인지를 검사
		// @param str - 검사할 문자열
		// @return boolean - 공백, null이 아닐 경우 true
		public boolean isValue(String str) {
			boolean result = false;
			if(str !=null) {
				result = !str.trim().equals("");
			}
		return result;
		}
			
		// validation 처리를 위한 메서드 정의
		// 한글로만 구성되어 있는지 형식 검사
		// @param str - 검사할 문자열
		// @return boolean - 형식에 맞을 경우 true, 걿지 않을 경우 false
		public boolean isKor(String str) {
			boolean result = false;
			if(isValue(str)) {
				result = Pattern.matches("^[ㄱ-ㅎ가-힣]*$", str);		
			}
			return result;
		}
		// 숫자인지를 검사
		// @pram : str - 검사할 문자열
		// @return : boolean - 형식이 맞을 경우 true, 
		//						- 그렇지 않을 경우 false
		public boolean isNum(String str) {
			boolean result = false;
			if(isValue(str)) {
				result = Pattern.matches("^[0-9]*$", str);		
			}
			return result;
		}
		// "-" 없이 핸드폰 번호인지를 검사
		// @pram : str - 검사할 문자열
		// @return : boolean - 형식이 맞을 경우 true, 
		//						- 그렇지 않을 경우 false
		public boolean isPhone(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;
		}
		// 이메일인지 검사
		// @pram : str - 검사할 문자열
		// @return : boolean - 형식이 맞을 경우 true, 
		//						- 그렇지 않을 경우 false
		public boolean isMail(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;
		}
	}
package patterchecker;

import java.util.regex.Pattern;

import javax.annotation.processing.AbstractProcessor;

public class Main01 {

	public static void main(String[] args) {
		// 회원가입시에 압력한 내용을 가정한 변수값들
		String name = "김자바";
		String age = "19";
		String email = "user@java.com";
		String phone = "01093812070";
		
		// 한글 여부 검사
		boolean isKor = Pattern.matches("^[ㄱ-ㅎ가-힣]*$", name);
		//System.out.println(isKor);
		
		if(!isKor) {
			System.out.println("이름은 한글로만 입력해주세요.");
			// 실행 도중 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("회원가입 절차를 진행합니다");
	}

}
package patterchecker;

import study.java.helper.RegexHelper;

public class Main02 {

	public static void main(String[] args) {
		// validation 처리를 RegexHelper의 메서드들을 사용해서 처리
		
		String name = "김자바";
		String age = "19";
		String email = "user@java.com";
		String phone = "01093812070";
		
		if (!RegexHelper.getInstance().isKor(name)) {
			System.out.println("이름은 한글로만 입력해주세요");
			return;
		}
		
		if (!RegexHelper.getInstance().isNum(age)) {
			System.out.println("나이는 숫자로만 입력해주세요");
			return;
		}
		
		if (!RegexHelper.getInstance().isPhone(phone)) {
			System.out.println("번호는 숫자로만 입력해주세요");
			return;
		}
		
		if (!RegexHelper.getInstance().isMail(email)) {
			System.out.println("메일은 영어와 숫자로만 입력해주세요");
			return;
		}
		
		System.out.println("회원가입 절차를 진행합니다.");
	}

}

0개의 댓글