개발 업무/Java Script

한글입력 유무 판단, 숫자 외 입력 유무 판단 등

호크아이나인 2023. 2. 9. 10:44

/**
 * 한글입력 확인 
 * 
 * @author kyoungsoo lee
 * @date 2023. 01. 26.
 * @memberOf strLib
 * @param {string} source - 원본 문자열
 * @return {boolean} 한글 포함 여부
 * @example strLib.filterCharForLocal("abcd홍길동");
 */
strLib.filterCharForLocal = function(str) {
    try {
        for ( var i=0; i < str.length; i++){
            var asc = str.charCodeAt(i);
            if (asc > 127) {
                return false;
            }
        }
        return true;
    } catch (e) {
        console.log("strLib.isKorean: " + e);
    }
};

/**
 * 한글입력 확인 
 * 
 * @author kyoungsoo lee
 * @date 2023. 01. 26.
 * @memberOf strLib
 * @param {string} source - 원본 문자열
 * @return {boolean} 한글 포함 여부
 * @example strLib.filterCharForLocal("abcd홍길동");
 */
strLib.isKorean = function(source) {
    try {
        if (source != null && source.trim().length > 0) {
            var locale = 0;
            for (var i = 0; i < source.length; i++) {
                locale = strLib.getLocale(source.charAt(i));
                if ((locale & ~0x3) == 0) {
                    return true;
                }
            }
        }

        return false;
    } catch (e) {
        console.log("strLib.isKorean: " + e);
    }
};

/**
 * 숫자 이외 값 입력 확인 
 * 
 * @author  kyoungsoo lee
 * @date 2023. 01. 30.
 * @memberOf strLib
 * @param {string} source - 원본 문자열
 * @return {boolean} 숫자 이외 값 입력 여부
 * @example strLib.filterCharForLocal("12-989");
 */
strLib.filterCharForNum = function(str) {
    var re = new RegExp('[0-9]');
    var isOtherChar = false;
    for(var i=0; i < str.length; i++){
        var ch = str.charAt(i);
        if(!re.test(ch)){
            isOtherChar = true;
            break;
        }
    }
    
    return isOtherChar;
};

/**
 * 입력받은 문자열에 특수 문자가 있으면 true, 아니면 false를 리턴합니다.
 * 
 * @author kyoungsoo lee
 * @date 2023. 01. 18.
 * @memberOf strLib
 * @param {string} source - 원본 문자열
 * @return {boolean} 특수문자 포함 여부
 * @example strLib.isSpecialCharacters("무궁화꽃이");
 */
strLib.isSpecialCharacters = function(source) {
    try {
        if (source != null && source.trim().length > 0) {
            var locale = 0;
            for (var i = 0; i < source.length; i++) {
                locale = strLib.getLocale(source.charAt(i));
                if ((locale & ~0X8) == 0) {
                    return true;
                }
            }
        }

        return false;
    } catch (e) {
        console.log("strLib.isKorean: " + e);
    }
};


/**
 * 문자(char)의 유형을 반환합니다.
 * 
 * @author  kyoungsoo lee
 * @date 2023. 01. 30.
 * @memberOf strLib
 * @param {string} source - 원본 문자열
 * @return {number} 한글음절(1), 한글자모(2), 숫자(4), 특수문자(8), 영문대(16), 영문소(32), 기타(48)
 */
strLib.getLocale = function(source) {
    try {
        var locale = 0;
        if (source.length > 0) {
            var charCode = source.charCodeAt(0);

            if (charCode >= 0XAC00 && charCode <= 0XD7A3) {
                // 한글음절.[44032 ~ 55203]
                locale = 0X1; // 1
            } else if ((charCode >= 0X1100 && charCode <= 0X11F9) || (charCode >= 0X3131 && charCode <= 0X318E)) {
                // 한글자모.[4352 ~ 4601]
                locale = 0X2; // 2
            } else if (charCode >= 0X30 && charCode <= 0X39) {
                // 숫자.[48 ~ 57]
                locale = 0X4; // 4
            } else if ((charCode >= 0X20 && charCode <= 0X2F) || (charCode >= 0X3A && charCode <= 0X40) || (charCode >= 0X5B && charCode <= 0X60)
                    || (charCode >= 0X7B && charCode <= 0X7E)) {
                // 특수문자
                locale = 0X8; // 8
            } else if (charCode >= 0X41 && charCode <= 0X5A) {
                // 영문 대.[65 ~ 90]
                locale = 0X10; // 16
            } else if (charCode >= 0X61 && charCode <= 0X7A) {
                // 영문 소.[97 ~ 122]
                locale = 0X20; // 32
            } else {
                // 기타
                locale = 0X30; // 48
            }
        }
        return locale;
    } catch (e) {
        console.log("strLib.getLocale: " + e);
    }
};