-
[Java] 정규식을 사용하여 유효성을 검사하자백엔드/Spring 2020. 4. 13. 00:34
유효성 검사
모든 프로젝트들은 어느 정도 완성이 되었다면
적절한 유효성 검사가 필요합니다.
사용자에게로 부터 입력 값을 받을때 적절한 처리를 통해서
의도되는 값을 받아서 처리를 할 수 있다는 뜻 입니다.
( 주민등록번호는 xxxxxx-xxxxxxx 형식)
위와 같은 패턴을 어길 시에는
alert('올바른 형식의 주민등록번호를 입력하세요')
위와 같은 알림 창으로 사용자를 유도할 수 있습니다.
java.util.regex 패키지에 있는Match 클래스와 Pattern 클래스를 이용하여 문자열을 정규검증식으로 나타낼 수 있습니다.
출처: https://devfalledinmac.tistory.com/14 [MAC 빠진 개발자]java.util.regex 패키지에 있는Match 클래스와 Pattern 클래스를 이용하여 문자열을 정규검증식으로 나타낼 수 있습니다.
출처: https://devfalledinmac.tistory.com/14 [MAC 빠진 개발자]Matchs And Pattern
이는 자바에서 제공하는 Matchs와 Pattern 클래스를 사용하여 문자열 검증 정규식 개발이 가능합니다.
1import java.util.regex.Pattern;cs 숫자인지 검사하는 정규식 예제입니다.
123public boolean isNumeric(String str) {return Pattern.matches("^[0-9]*$", str);}cs >> 이에 대한 문법은 나무위키에서 확인 가능합니다. <<
정규식 정리
개발에 사용한 각종 정규식을 정리한 코드입니다.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869// 숫자 검사기public boolean isNumeric(String str) {return Pattern.matches("^[0-9]*$", str);}// 영어 검사기public boolean isAlpha(String str) {return Pattern.matches("^[a-zA-Z]*$", str);}// 한국어 혹은 영어 검사기public boolean isAlphaNumeric(String str) {return Pattern.matches("[a-zA-Z0-9]*$", str);}// 한국어 검사기public boolean isKorean(String str) {return Pattern.matches("[가-힣]*$", str);}// 대문자 검사기public boolean isUpper(String str) {return Pattern.matches("^[A-Z]*$", str);}// 소문자 검사기public boolean isDowner(String str) {return Pattern.matches("^[a-z]*$", str);}// 이메일 검사기public boolean isEmail(String str) {return Pattern.matches("^[a-z0-9A-Z._-]*@[a-z0-9A-Z]*.[a-zA-Z.]*$", str);}// URL 검사기 (Http, Https 제외)public boolean isURL(String str) {return Pattern.matches("^[^((http(s?))\\:\\/\\/)]([0-9a-zA-Z\\-]+\\.)+[a-zA-Z]{2,6}(\\:[0-9]+)?(\\/\\S*)?$",str);}// phone number checker// xxx-xxx-xxxx (형식만 비교)// - 은 없어야 함.public boolean isMob(String str) {return Pattern.matches("^\\d{2,3}\\d{3,4}\\d{4}$", str);}// 일반 전화 검사기public boolean isPhone(String str) {return Pattern.matches("^\\d{2,3}\\d{3,4}\\d{4}$", str);}// IP 검사기public boolean isIp(String str) {return Pattern.matches("([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})", str);}// 우편번호 검사기public boolean isPost(String str) {return Pattern.matches("^\\d{3}\\d{2}$", str);}// 주민등록번호 검사기public boolean isPersonalID(String str) {return Pattern.matches("^(?:[0-9]{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[1,2][0-9]|3[0,1]))-[1-4][0-9]{6}$", str);}cs 좀 더 프로젝트에 알맞게!!
Common_Regex : 주로 쓰이는 정규식, (한영, 숫자 검사)을 재활용합니다.
Common_Check : 프로젝트에 특화된 검사합니다, 경우에 따라서는 Common_Regex을 상속합니다.
ValidCheck : 유효성 검사기, 이를 총체적으로 extends한 ValidCheck에 담아 사용이 가능합니다.
프로젝트에 따라
적절한 상속이 필요하다는 이야기이지요.
12345678// ValidCheck.javapublic boolean userInfo(String name, String phone1, String phone2, String phone3, String mob1, String mob2,String mob3, String job, String email) {return (checker.isKorean(name) && checker.isPhone(phone1 + phone2 + phone3)&& checker.isMob(mob1 + mob2 + mob3) && checker.checkJob(job) && checker.isEmail(email));}cs 위와 같이 사용자 정보를 예시로 들면
이름과, 전화번호 등등의 정보를 모두 묶어 입력 형식에 맞춘 검사가 가능해집니다.
isKorean(), isPhone(), isMob(), isEmail() : Common_Regex에서 상속
checkJob() : Common_Check에서 상속 ( 승인되는 Job은 프로젝트에 따라 다를 수 있다)
123ValidCheck check = new ValidCheck();check.userInfo(....) // list로 접근도 가능cs 이를 통해단 하나의 check 클래스를 통해서모든 유효성 검사가 가능해 보다 편해집니다.저의 경우에는 이렇게 사용하는게 편했는데좋은 의견있으면 댓글 부탁드립니다!!관련글
마무리
하지만 정규식은 빠르지 않기에
적절하게 사용하는 것이 현명합니다.
이후 적절한 에러코드, 에러로그 출력도 중요
※ 본 글은 개인 포트폴리오 혹은 공부용으로 사용하기 때문에, 무단 복사 유포는 금지하지만, 개인 공부 용도로는 얼마든지 사용하셔도 좋습니다
반응형'백엔드 > Spring' 카테고리의 다른 글
[Spring] org.apache.maven.wagon:wagon-ssh:2.1 error in jdk7 (0) 2020.06.09 [SpringBoot] org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) (2) 2020.04.15 [Spring Framework] STS4에서 spring legacy project가 없는 경우 (0) 2020.04.02 [eGovFrame] 전자정부표준프레임워크 개발환경 설치하기 (1) 2020.02.24