반응형
import java.io.UnsupportedEncodingException;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

/**
 * 문자열 체크를 하는 유틸
 *
 * @author kimkc
 */
public class StringValidator {

    // IP 주소 패턴
    private static final Pattern PATTERN_IPADDRESS = Pattern
            .compile("^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])$");
    // Email 주소 패턴
    private static final Pattern PATTERN_EMAIL = Pattern.compile("[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})+");
    // 비밀번호 패턴 (문자, 숫자, 특수문자의 조합으로 9~16자리)
    private static final Pattern PATTERN_PW = Pattern
            .compile("(?=([a-zA-Z].*[0-9].*[^0-9a-zA-Z].*)|([a-zA-Z].*[^0-9a-zA-Z].*[0-9].*)|([0-9].*[a-zA-Z].*[^0-9a-zA-Z].*)|([0-9].*[^0-9a-zA-Z].*[a-zA-Z].*)|([^0-9a-zA-Z].*[a-zA-Z].*[0-9].*)|([^0-9a-zA-Z].*[0-9].*[a-zA-Z].*)$).{9,16}");
    // 추가 비밀번호 패턴 (연속된 문자 3개 이상 금지)
    private static final Pattern PATTERN_SAME = Pattern.compile(".*(.)\\1\\1.*");

    /**
     * 엔코딩이 유효한지 체크
     *
     * @param value
     * @return
     */
    public static boolean isNotValidEncoding(final String value) {
        return !isValidEncoding(value);
    }

    /**
     * 엔코딩이 유효한지 체크
     *
     * @param value
     * @return
     */
    public static boolean isValidEncoding(final String value) {
        boolean result = true;
        try {
            new String("".getBytes(), value);
        } catch (UnsupportedEncodingException e) {
            result = false;
        }
        return result;
    }

    /**
     * 입력 받은 IP주소가 정규식 표현이 맞는치 체크
     *
     * @param ip
     * @return s
     */
    public static boolean isIPAddress(final String ip) {
        return PATTERN_IPADDRESS.matcher(ip).matches();
    }

    /**
     * 입력 받은 이메일 주소가 정규식 표현이 맞는치 체크
     *
     * @param email
     * @return
     */
    public static boolean isEmail(final String email) {
        return PATTERN_EMAIL.matcher(email).matches();
    }

    /**
     * 문자 조합 규칙 체크
     *
     * @param password
     * @return
     */
    public static boolean isPasswordCharacter(final String password) {
        return PATTERN_PW.matcher(password).matches();
    }

    /**
     * 3개 이상 동일한 문자 패턴 체크
     *
     * @param password
     * @return
     */
    public static boolean isSamePattern(final String password) {
        return PATTERN_SAME.matcher(password).matches();
    }

    /**
     * 3개 이상 연속된 문자 패턴 체크
     *
     * @param password
     * @return
     */
    public static boolean isContinuousPattern(final String password) {
        if (password == null)
            return false;

        int count = 0;
        char c = 0;
        char before = 0;
        for (int i = 0; i < password.length(); i++) {
            c = password.charAt(i);
            if (c >= 48 && c <= 57 && (before + 1 == c)) {
                count++;
                if (count >= 2)
                    return true;
            } else {
                count = 0;
            }

            before = c;
        }

        return false;
    }

    /**
     * 정규식 표현이 유효한지 체크
     *
     * @param regex
     * @return
     */
    public static boolean isInvalidRegularExpression(String regex) {
        try {
            Pattern.compile(regex);
        } catch (PatternSyntaxException e) {
            return false;
        }
        return true;
    }

}
반응형

'기타' 카테고리의 다른 글

C/C++와 JAVA 비교  (0) 2018.01.10
REST API란?  (0) 2017.12.10
JSON이란?  (0) 2017.12.10
마크다운(Markdown) 이란?  (0) 2017.12.10
문자열 체크 예제  (0) 2016.04.18
아두이노 동영상 강의  (0) 2016.04.17

+ Recent posts