개발/Java

[Java] 정규표현식(Regular Expression) : 자주 쓰는 정규식 정리(휴대전화, 이메일, 비밀번호 등)

moonong 2020. 2. 7. 18:58
반응형

정규표현식은 쓸 때마다 헷갈려서.. 매번 검색하는 것도 성가시니 이번 기회에 정리를 하고 넘어가야겠다.

정규표현식 정리

표현식 설명
^ 문자열의 시작
$ 문자열의 종료
. 임의의 한 문자 (문자의 종류 가리지 않음,  단, \ 는 넣을 수 없음)
* 앞 문자가 없을 수도 무한정 많을 수도 있음
+ 앞 문자가 하나 이상
? 앞 문자가 없거나 하나있음
[] 문자의 집합이나 범위를 나타내며 두 문자 사이는 - 기호로 범위를 나타낸다. []내에서 ^가 선행하여 존재하면 not 을 나타낸다.
{} 횟수 또는 범위를 나타낸다.
() 소괄호 안의 문자를 하나의 문자로 인식 
| 패턴 안에서 or 연산을 수행할 때 사용
\s 공백 문자
\S 공백 문자가 아닌 나머지 문자
\w 알파벳이나 숫자
\W 알파벳이나 숫자를 제외한 문자
\d 숫자 [0-9]와 동일
\D 숫자를 제외한 모든 문자
\ 정규표현식 역슬래시(\)는 확장 문자. 역슬래시 다음에 일반 문자가 오면 특수문자로 취급하고 역슬래시 다음에 특수문자가 오면 그 문자 자체를 의미
(?i) 앞 부분에 (?i) 라는 옵션을 넣어주면 대소문자를 구분하지 않음

자주 쓰이는 정규식 패턴

분류 정규식 패턴
숫자 ^[0-9]*$
영문자 ^[a-zA-Z]*$
한글 ^[가-힣]*$
영어&숫자 ^[a-zA-Z0-9]*$
비밀번호 (숫자, 문자 포함의 6~12자리 이내) ^[A-Za-z0-9]{6,12}$
비밀번호 (숫자, 문자, 특수문자 포함 8~15자리 이내) ^.*(?=^.{8,15}$)(?=.*\d)(?=.*[a-zA-Z])(?=.*[!@#$%^&+=]).*$
이메일 ^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$
휴대전화 ^\\d{3}-\\d{3,4}-\\d{4}$
일반전화 ^\\d{2,3}-\\d{3,4}-\\d{4}$
주민등록번호 \d{6} \- [1-4]\d{6}
파일확장자 ^\\S+.(?i)(txt|pdf|hwp|xls)$
이중 파일확장자 (.+?)((\\.tar)?\\.gz)$

정규식 사용 예제

1. 숫자만

1
2
3
4
5
6
7
8
9
10
String str = "123456a";
Pattern pattern = Pattern.compile("^[0-9]*$");
Matcher matcher = pattern.matcher(str);
                
if(matcher.find()) {
    System.out.println(Integer.parseInt(str));
else {
    System.out.println("숫자가 아닌 값이 포함되어 있습니다. ");
}
 
cs

2. 이메일 형식

1
2
3
4
5
6
7
String pattern2 = "^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$";
String str2 = "abc_123@gmail.com";
if(Pattern.matches(pattern2, str2)) {
    System.out.println("올바른 이메일 형식입니다. ");
else {            
    System.out.println("올바른 이메일 형식이 아닙니다. ");
}
cs

3. 휴대전화 형식

1
2
3
4
5
6
7
pattern2 = "^\\d{3}-\\d{3,4}-\\d{4}$";
str2 = "010-1234-1234";
if(Pattern.matches(pattern2, str2)) {
    System.out.println("올바른 휴대전화 형식입니다. ");
else {            
    System.out.println("올바른 휴대전화 형식이 아닙니다. ");
}
cs

4. 파일 확장자 형식

1
2
3
4
5
6
7
8
9
10
11
pattern2 = "^\\S+.(?i)(txt|pdf|hwp|xls)$";
str2 = "abc.txt";
// 이중확장자 
// pattern2 = "(.+?)((\\.tar)?\\.gz)$";
// str2= "lib.tar.gz";
 
if(Pattern.matches(pattern2, str2)) {
    System.out.println("올바른 확장자 형식입니다. ");
else {            
    System.out.println("올바른 확장자 형식이 아닙니다. ");
}
cs

패턴 분석: ^\S+.(?i)(txt|pdf|hwp|xls)$
^ : 시작
\ : \ 가 왔기 때문에 다음에 올 문자는 특수문자로 취급하고 , \다음 특수문자고 오면 그 자체로 취급.
\S : 공백 아닌 문자
+. : .이 반드시 한개는 와야한다.
(?i) : 대소문자 구별하지 않음.
(txt|pdf|hwp|xls) : txt 혹은 pdf 혹은 hwp 혹은 xls 만 허용. | 을 이용한 or 연산!
$ : 끝
-> 공백아닌 문자와 .이 반드시 와야하고 뒤에는 txt, pdf, hwp, xls 만 허용.

References:

https://highcode.tistory.com/6
https://epthffh.tistory.com/entry/비밀번호-정규식

반응형