[JAVA][정규식]전화번호 체크 & 숫자체크 & 이메일 체크
정규식 기본문법
표현식 | 설명 |
^ | 문자열의 시작 |
$ | 문자열의 종료 |
. | 임의의 한 문자 (문자의 종류 가리지 않음) 단, 는 넣을 수 없음 |
* | 앞 문자가 없을 수도 무한정 많을 수도 있음 |
+ | 앞 문자가 하나 이상 |
? | 앞 문자가 없거나 하나있음 |
[] | 문자의 집합이나 범위를 나타내며 두 문자 사이는 – 기호로 범위를 나타낸다. []내에서 ^가 선행하여 존재하면 not 을 나타낸다. |
{} | 횟수 또는 범위를 나타낸다. |
() | 소괄호 안의 문자를 하나의 문자로 인식 |
| | 패턴 안에서 or 연산을 수행할 때 사용 |
s | 공백 문자 |
S | 공백 문자가 아닌 나머지 문자 |
w | 알파벳이나 숫자 |
W | 알파벳이나 숫자를 제외한 문자 |
d | 숫자 [0-9]와 동일 |
D | 숫자를 제외한 모든 문자 |
정규표현식 역슬래시()는 확장 문자 역슬래시 다음에 일반 문자가 오면 특수문자로 취급하고 역슬래시 다음에 특수문자가 오면 그 문자 자체를 의미 |
|
(?i) | 앞 부분에 (?i) 라는 옵션을 넣어주면 대소문자를 구분하지 않음 |
정규식 Pattern 주요 메서드
메서드 | 설명 |
compile(String regex) | 정규표현식의 패턴을 작성 |
matches(String regex, CharSequence input) | 정규표현식의 패턴과 문자열이 일치하는지 체크. 일치할 경우 true, 일치하지 않는 경우 false를 리턴. |
정규식 Matcher 주요 메서드
메서드 | 설명 |
matches() | 정규표현식의 패턴과 문자열이 일치하는지 체크 일치할 경우 true, 일치하지 않는 경우 false를 리턴 |
find() | 정규표현식의 패턴과 문자열이 일치하는지 체크합니다 그리고 그 위치로 이동 일치할 경우 true, 일치하지 않는 경우 false를 리턴 |
find(int start) | start위치부터 find() 작업을 수행 |
group() | 매칭된 부분 중 첫 번째 그룹을 리턴 |
group(int group) | 매칭된 부분중 group번째 그룹을 리턴 |
groupCount() | 매칭된 group의 전체 갯수를 리턴 |
전화번호 체크
public static String getStringToPhoneNumber(String src) {
if(src.startsWith("02")){
return src.replaceAll("([0-9]{2})([0-9]+)([0-9]{4})", "$1-$2-$3");
}else if(src.length() == 8) { //1600-5588 case
return src.replaceAll("([0-9]{4})([0-9]{4})", "$1-$2");
}else {
return src.replaceAll("([0-9]{3})([0-9]+)([0-9]{4})", "$1-$2-$3");
}
}
숫자인지 체크
public static boolean invalidNumberFormat(String src) {
return Pattern.matches("[0-9]{1,11}", src);
}
String str = "1249f0fddfs3456a";
Pattern pattern = Pattern.compile("^[0-9]*$");
Matcher matcher = pattern.matcher(str);
if(matcher.find()) {
System.out.println(Integer.parseInt(str));
} else {
System.out.println("숫자만 입력 가능합니다.");
}
이메일주소 체크
public static boolean invalidEmailFormat(String src) {
return Pattern.matches("[a-zA-Z0-9\+\.\_\%\-\+]{1,256}" +
"\@" +
"[a-zA-Z0-9][a-zA-Z0-9\-]{0,64}" +
"(" +
"\." +
"[a-zA-Z0-9][a-zA-Z0-9\-]{0,25}" +
")+", src);
}
영어 문자와 숫자만 허용하는 경우
boolean flag = Pattern.matches("^[a-zA-Z0-9]*$", strInput);
영어와 문자를 반드시 포함해야하는 경우 (최소 8~30자 체크)
boolean isFalg = Pattern.matches("^(?=.*[0-9])(?=.*[a-zA-Z]).{8,30}$", src);
영문으로 시작하거나 또는 영문+숫자 조합의 아이디 체크
import java.util.regex.Pattern;
public class CodeTest {
public static boolean invalidUserIdFormat(String src) {
return Pattern.matches("^[a-zA-Z]+[a-zA-Z0-9]{2,30}$", src);
// return Pattern.matches("^(?=.*[0-9])(?=.*[a-zA-Z]).{8,30}$", src);
}
public static void main(String[] args) {
boolean isVal = invalidUserIdFormat("1ffd");
System.out.println(isVal);
boolean isVal2 = invalidUserIdFormat("koRea1");
System.out.println(isVal2);
boolean isVal3 = invalidUserIdFormat("korea1S11");
System.out.println(isVal3);
}
}
자바 자주 사용하는 정규식
숫자만 | ^[0-9]*$ |
영문자만 | ^[a-zA-Z]*$ |
한글만 | ^[가-힣]*$ |
영어 & 숫자만 | ^[a-zA-Z0-9]*$ |
^[a-zA-Z0-9]+@[a-zA-Z0-9]+$ | |
파일확장자 |
^\S+.(?i)(txt|pdf|hwp|xls)$ |
휴대폰 | ^01(?:0|1|[6-9]) – (?:d{3}|d{4}) – d{4}$ |
일반전화 | ^d{2,3} – d{3,4} – d{4}$ |
주민등록번호 | d{6} – [1-4]d{6} |
IP 주소 | ([0-9]{1,3}) . ([0-9]{1,3}) . ([0-9]{1,3}) . ([0-9]{1,3}) |
비밀번호 (숫자, 문자 포함의 6~12자리 이내) | ^[A-Za-z0-9]{6,12}$ |
비밀번호 (숫자, 문자, 특수문자 포함 8~15자리 이내) | ^.*(?=^.{8,15}$)(?=.*d)(?=.*[a-zA-Z])(?=.*[!@#$%^&+=]).*$ |
[REFERENCE]