zioinfo-mail/zioinfo/js/valid.base.js
DESKTOP-TKLFCPR\ython e228faabf5 feat(itsm): G-1~G-12 확장 기능 + 하네스/봇/설치스크립트 구현
G-1: 메신저 Webhook Relay + _send_to_room 실제 httpx 호출 구현
G-2: POST /api/tasks/bulk SR 대량작업 엔드포인트 (최대 100건)
G-3: 라이선스 만료 알림 스케줄러 (매일 09:00 KST)
G-4: 체험판 upgrade_banner 필드 + license.py 배너 로직
G-5: core/auto_rca.py + incidents/problem auto-rca 엔드포인트
G-6: core/deploy_impact.py + vibe impact-analysis 엔드포인트
G-7: core/ticket_classifier.py + SR 생성 시 AI 분류 + ai-suggestion API
G-8: VulnPatchRecord 모델 + vuln_scan 패치추적 4개 엔드포인트
G-9: core/jira_sync.py + gateway Jira/Confluence 연동 엔드포인트
G-10: core/push_notify.py + routers/push.py + PushSubscription 모델
G-11: approvals 다중승인 (위임/서명/기한초과/마감연장)
G-12: alembic.ini + migrations/ + cicd/migrate_to_postgres.sh

하네스: guardia-orchestrator 확장기능 Phase 반영
봇명령어: /sr /status /license /bulk 슬래시 명령어 추가
설치스크립트: setup/ (Ubuntu, CentOS, RHEL, Windows) --test 옵션 포함

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-29 18:18:52 +09:00

490 lines
11 KiB
JavaScript

/*-------------------------------------------------------------------+
* 1. 파일명: valid.js
* 2. 설 명: 필수항목여부 및 길이에 대한 유효성 점검을
* 위한 함수를 정의한다.
* 3. 의존성: ui.js
* 4. 작성자:
* 5. 작성일: 2006.10.10.
-------------------------------------------------------------------*/
/**
* 값이 비었는지 여부를 점검하여 돌려준다.
* 주어진 값이 null이거나, undefined이거나 빈 문자열("")이면
* 비었다고 판단한다.
*/
function isEmpty(value, afterTrim) {
if ( value == null || typeof(value) == "undefined" ) return true;
if ( afterTrim == undefined ) afterTrim = true;
/* 문자열이 아니면 문자열로 변경한다. */
if ( typeof(value) == "string" ) value = new String(value);
if ( afterTrim ) value = trim(value);
return ("" == value);
}
/**
* 주어진 객체의 값이 빈 값인지 여부를 검사하여
* 돌려준다. 빈값이면 true, 아니면 false이다.
*/
function isEmptyObj(obj, afterTrim) {
obj = ref(obj);
return isEmpty(obj.value, afterTrim);
}
/**
* 주어진 값이 정수 값인지 혹은 정수로 치환될 수 있는
* 문자열 값인지 여부를 돌려 준다.
* 자릿수 값이 있을 경우는 자릿수 이하인지도 검사한다.
*
* @param cipher 제한 자릿수. 사전 찾아 보니 이 단어네요.
*/
function isInteger(value, cipher) {
/* 일단 빈 값이면 true. */
if ( isEmpty(value) ) return true;
/* value 값이 String이 아니면 String으로 바꾼다. */
var numStr = "";
if ( typeof(value) != "string" ) numStr = new String(value);
/* 3자리마다 컴마가 들어간 숫자일 수도 있으니 컴마를 삭제한다. */
numStr = removeChar(numStr, ",");
/* 숫자가 아닌가? */
if ( isNaN(numStr) ) return false;
/* 숫자이지만 정수인가? 소숫점을 가지고 있는가? */
if ( numStr.indexOf(".") > -1 ) return false;
/* 자릿수 제한이 있다면 주어진 자릿수 이하인가? */
if ( ! isEmpty(cipher) && numStr.length > cipher ) return false;
/* 여기까지 왔으면 합격! */
return true;
}
/**
* 주어진 값이 소수 값인지 혹은 소수로 치환될 수 있는
* 문자열 값인지 여부를 돌려 준다.
* 자릿수 값이 있을 경우는 자릿수 이하인지도 검사한다.
*
* @param value 소수 여부를 확인할 값.
* @param integerPartCipher 정수부 제한 자릿수.
* @param fractionCipher 소수부 제한 자릿수.
*/
function isFloat(value, integerPartCipher, fractionCipher) {
/* 일단 빈 값이면 true. */
if ( isEmpty(value) ) return true;
/* value 값이 String이 아니면 String으로 바꾼다. */
var numStr = "";
if ( typeof(value) != "string" ) numStr = new String(value);
/* 3자리마다 컴마가 들어간 숫자일 수도 있으니 컴마를 삭제한다. */
numStr = removeChar(numStr, ",");
/* 숫자가 아닌가? */
if ( isNaN(numStr) ) return false;
/* 자릿수 제한이 있다면 정수부와 소수부로 나눈다. */
if ( ! isEmpty(integerPartCipher) || ! isEmpty(fractionCipher) ) {
var tempArr = numStr.split(".");
var intergerPart = tempArr[0]; // 정수부
var fractionPart = tempArr.length > 1 ? tempArr[1] : ""; // 소수부
/* 정수부 확인. */
if ( ! isEmpty(integerPartCipher) && intergerPart.length > integerPartCipher ) return false;
/* 소수부 확인. */
if ( ! isEmpty(fractionCipher) && fractionPart.length > fractionCipher ) return false;
}
/* 여기까지 왔으면 합격! */
return true;
}
/**
* 주어진 문자열의 byte 수가 length의 값과 같은지를
* 검사하여 같으면 true를, 다르면 false를 돌려준다.
*
* @param str 대상 문자열
* @param length 비교 byte 수
*/
function checkLengthEQ(str, length) {
return countByte(str) == length;
}
/**
* Text형 입력폼 값의 byte 수가 length의 값과 같은지를
* 검사하여 같으면 true를, 다르면 false를 돌려준다.
*
* @param obj Text형 입력폼 객체
* @param length 비교 byte 수
*/
function checkLengthEQObj(obj, length) {
return checkLengthEQ(obj.value, length);
}
/**
* Text형 입력폼 값의 byte 수가 length의 값과 같은지를
* 검사하여 그렇다면 true를, 그렇지 않으면 false를 돌려준다.
*
* @param value 검사대상 값.
* @param length 비교 byte 수.
* @param fieldName 항목명
*/
function validateLengthEQ(value, length, fieldName) {
if ( fieldName == undefined ) {
fieldName = "";
}
else {
fieldName += "의 ";
}
var valid = checkLengthEQ(value, length);
if ( ! valid ) {
showMessage(fieldName + " 값은 " + length + " 글자(숫자, 영문 기준)이어야 합니다.");
}
return valid;
}
/**
* Text형 입력폼 값의 byte 수가 length의 값과 같지를
* 검사하여 그렇다면 true를, 그렇지 않으면 false를 돌려준다.
*
* @param obj Text형 입력폼 객체
* @param length 비교 byte 수
* @param fieldName 항목명
*/
function validateLengthEQObj(obj, length, fieldName) {
var valid = validateLengthEQ(obj.value, length, fieldName);
if ( ! valid ) {
obj.focus();
}
return valid;
}
/**
* 주어진 문자열의 byte 수가 length의 값보다 큰지를
* 검사하여 같으면 true를, 다르면 false를 돌려준다.
*
* @param str 대상 문자열
* @param length 비교 byte 수
*/
function checkLengthGT(str, length) {
return countByte(str) > length;
}
/**
* Text형 입력폼 값의 byte 수가 length의 값보다 큰지를
* 검사하여 같으면 true를, 다르면 false를 돌려준다.
*
* @param obj Text형 입력폼 객체
* @param length 비교 byte 수
*/
function checkLengthGTObj(obj, length) {
return checkLengthGT(obj.value, length);
}
/**
* Text형 입력폼 값의 byte 수가 length의 값보다 큰지를
* 검사하여 그렇다면 true를, 그렇지 않으면 false를 돌려준다.
*
* @param value 검사대상 값.
* @param length 비교 byte 수.
* @param fieldName 항목명
*/
function validateLengthGT(value, length, fieldName) {
if ( fieldName == undefined ) {
fieldName = "";
}
else {
fieldName += "의 ";
}
var valid = checkLengthGT(value, length);
if ( ! valid ) {
showMessage(fieldName + " 값은 " + length + " 글자(숫자, 영문 기준)보다 커야 합니다.");
}
return valid;
}
/**
* Text형 입력폼 값의 byte 수가 length의 값보다 큰지를
* 검사하여 그렇다면 true를, 그렇지 않으면 false를 돌려준다.
*
* @param obj Text형 입력폼 객체
* @param length 비교 byte 수
* @param fieldName 항목명
*/
function validateLengthGTObj(obj, length, fieldName) {
var valid = validateLengthGT(obj.value, length, fieldName);
if ( ! valid ) {
obj.focus();
}
return valid;
}
/**
* 주어진 문자열의 byte 수가 length의 값보다 작은지를
* 검사하여 같으면 true를, 다르면 false를 돌려준다.
*
* @param str 대상 문자열
* @param length 비교 byte 수
*/
function checkLengthLT(str, length) {
return countByte(str) < length;
}
/**
* Text형 입력폼 값의 byte 수가 length의 값보다 작은지를
* 검사하여 같으면 true를, 다르면 false를 돌려준다.
*
* @param obj Text형 입력폼 객체
* @param length 비교 byte 수
*/
function checkLengthLTObj(obj, length) {
return checkLengthLT(obj.value, length);
}
/**
* Text형 입력폼 값의 byte 수가 length의 값보다 작은지를
* 검사하여 그렇다면 true를, 그렇지 않으면 false를 돌려준다.
*
* @param value 검사대상 값.
* @param length 비교 byte 수.
* @param fieldName 항목명
*/
function validateLengthLT(value, length, fieldName) {
if ( fieldName == undefined ) {
fieldName = "";
}
else {
fieldName += "의 ";
}
var valid = checkLengthLT(value, length);
if ( ! valid ) {
showMessage(fieldName + " 값은 " + length + " 글자(숫자, 영문 기준)보다 작아야 합니다.");
}
return valid;
}
/**
* Text형 입력폼 값의 byte 수가 length의 값보다 작은지를
* 검사하여 그렇다면 true를, 그렇지 않으면 false를 돌려준다.
*
* @param obj Text형 입력폼 객체
* @param length 비교 byte 수
* @param fieldName 항목명
*/
function validateLengthLTObj(obj, length, fieldName) {
var valid = validateLengthLT(obj.value, length, fieldName);
if ( ! valid ) {
obj.focus();
}
return valid;
}
/**
* 주어진 문자열의 byte 수가 length의 값보다 크거나 같은지를
* 검사하여 같으면 true를, 다르면 false를 돌려준다.
*
* @param str 대상 문자열
* @param length 비교 byte 수
*/
function checkLengthGE(str, length) {
return countByte(str) >= length;
}
/**
* Text형 입력폼 값의 byte 수가 length의 값과 크거나 같은지를
* 검사하여 같으면 true를, 다르면 false를 돌려준다.
*
* @param obj Text형 입력폼 객체
* @param length 비교 byte 수
*/
function checkLengthGEObj(obj, length) {
return checkLengthGE(obj.value, length);
}
/**
* Text형 입력폼 값의 byte 수가 length의 값보다 작은지를
* 검사하여 그렇다면 true를, 그렇지 않으면 false를 돌려준다.
*
* @param value 검사대상 값.
* @param length 비교 byte 수.
* @param fieldName 항목명
*/
function validateLengthGE(value, length, fieldName) {
if ( fieldName == undefined ) {
fieldName = "";
}
else {
fieldName += "의 ";
}
var valid = checkLengthGE(value, length);
if ( ! valid ) {
showMessage(fieldName + " 값은 " + length + " 글자(숫자, 영문 기준)보다 크거나 같아야 합니다.");
}
return valid;
}
/**
* Text형 입력폼 값의 byte 수가 length의 값보다 작은지를
* 검사하여 그렇다면 true를, 그렇지 않으면 false를 돌려준다.
*
* @param obj Text형 입력폼 객체
* @param length 비교 byte 수
* @param fieldName 항목명
*/
function validateLengthGEObj(obj, length, fieldName) {
var valid = validateLengthGE(obj.value, length, fieldName);
if ( ! valid ) {
obj.focus();
}
return valid;
}
/**
* 주어진 문자열의 byte 수가 length의 값보다 작거나 같은지를
* 검사하여 같으면 true를, 다르면 false를 돌려준다.
*
* @param str 대상 문자열
* @param length 비교 byte 수
*/
function checkLengthLE(str, length) {
return countByte(str) <= length;
}
/**
* 주어진 문자열의 byte 수가 length의 값보다 작거나 같은지를
* 검사하여 같으면 true를, 다르면 false를 돌려준다.
*
* @param obj Text형 입력폼 객체
* @param length 비교 byte 수
*/
function checkLengthLEObj(obj, length, fieldName) {
return checkLengthLE(obj.value, length);
}
/**
* Text형 입력폼 값의 byte 수가 length의 값보다 작거나 같은지를
* 검사하여 그렇다면 true를, 그렇지 않으면 false를 돌려준다.
*
* @param value 검사대상 값.
* @param length 비교 byte 수.
* @param fieldName 항목명
*/
function validateLengthLE(value, length, fieldName) {
if ( fieldName == undefined ) {
fieldName = "";
}
else {
fieldName += "의 ";
}
var valid = checkLengthLE(value, length);
if ( ! valid ) {
showMessage(fieldName + " 값은 " + length + " 글자(숫자, 영문 기준)보다 작거나 같아야 합니다.");
}
return valid;
}
/**
* Text형 입력폼 값의 byte 수가 length의 값보다 작거나 같은지를
* 검사하여 그렇다면 true를, 그렇지 않으면 false를 돌려준다.
*
* @param obj Text형 입력폼 객체
* @param length 비교 byte 수
* @param fieldName 항목명
*/
function validateLengthLEObj(obj, length, fieldName) {
var valid = validateLengthLE(obj.value, length, fieldName);
if ( ! valid ) {
obj.focus();
}
return valid;
}
/* 필수항목 여부를 점검하여 항목이 있으면 true를,
* 없으면 오류 메세지를 보여주고 false를 돌려 준다.
*/
function validateMandatory(value, fieldName) {
var isValid = ! isEmpty(value);
if ( fieldName == undefined ) fieldName = "검사";
if ( ! isValid ) {
showMessage(fieldName + " 항목은 필수입력 사항입니다.");
}
return isValid;
}
function validateMandatoryObj(obj, fieldName) {
var isValid = validateMandatory(obj.value, fieldName);
if ( ! isValid ) obj.focus();
return isValid;
}