zioinfo-mail/zioinfo/js/valid.number.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

486 lines
13 KiB
JavaScript

/*-------------------------------------------------------------------+
* 1. 파일명: valid.number.js
* 2. 설 명: 숫자에 대한 유효성 점검 함수를 정의한다.
* 3. 의존성: ui.js, number.js
* 4. 작성자:
* 5. 작성일: 2006.10.11.
-------------------------------------------------------------------*/
/**
* Text형 입력폼의 값이 유효한 숫자값인지 점검하여
* 유효한 숫자이면 true를, 그렇지 않으면 false를 돌려준다.
* 값이 빈 문자열이면 false를 돌려주는 것에 주의한다.
*
* @param obj Text형 입력폼 객체
*/
function checkNumberObj(obj) {
return checkNumber(obj.value);
}
/**
* 비축 업무에서는 숫자에 3자리마다 컴마가 들어간
* 수치값을 사용한다. 이를 고려한 숫자여부를 점검하여
* 유효한 숫자이면 true를, 그렇지 않으면 false를
* 돌려준다. 값이 빈 문자열이면 false를 돌려주므로
* 빈값이 아닌지를 점검하여 사용하는 것에 주의한다.
*
* @param str 검사할 문자열
*/
function checkNumber(str) {
return ! isNaN( removeChar(str, ',') );
}
/**
* 숫자의 정수 자릿수와 소수 자릿수를 검사하여 각 자릿수가
* 주어진 자리수 이하인지 검사하여, 둘 다 자릿수 이하이면 0을,
* 정수부 자릿수만 이상 있으면 1을, 소수부 자릿수만 이상있으면 2를
* 둘 모두 이상 있으면 3을 돌려 준다. 소수부의 경우 값이 넘어오지
* 않으면(undefined이면) 무조건 유효한 것으로 한다.
*
* @date 2004-01-15
* @param no 검사할 숫자
* @param intFigure 정수부 유효 자릿수
* @param floatFigure 소수부 유효 자릿수
*/
function checkNoFigureLE(no, intFigure, floatFigure) {
// 컴마를 제거하고 정수부와 소수부로 나눈다.
var no = removeChar(no, ',');
var dotIndex = no.indexOf('.');
var intPart = ""; // 정수부
var floatPart = ""; // 소수점을 포함한 소수부
if ( dotIndex == -1 ) {
intPart = no;
}
else {
intPart = no.substring(0, dotIndex);
floatPart = no.substring(dotIndex);
}
// 정수부 유효 여부
var intPartValid = intPart.length <= intFigure;
// 소수부 유효여부
var floatPartValid = floatFigure == undefined || trim(floatFigure) == "" || ( floatPart.length - 1 <= floatFigure);
//alert(no + ", " + intPart + ", " + floatPart + ", " + intPartValid + ", " + floatPartValid);
return ( intPartValid ? 0 : 1 ) + ( floatPartValid ? 0 : 2 );
}
/**
* Text형 입력폼 값의 정수 자릿수와 소수 자릿수를 검사하여 각 자릿수가
* 주어진 자리수 이하인지 검사하여, 둘 다 자릿수 이하이면 0을,
* 정수부 자릿수만 이상 있으면 1을, 소수부 자릿수만 이상있으면 2를
* 둘 모두 이상 있으면 3을 돌려 준다. 소수부의 경우 값이 넘어오지
* 않으면(undefined이면) 무조건 유효한 것으로 한다.
*
* @date 2004-01-15
* @param obj Text형 입력폼 객체
* @param intFigure 정수부 유효 자릿수
* @param floatFigure 소수부 유효 자릿수
*/
function checkNoFigureLEObj(obj, intFigure, floatFigure) {
return checkNoFigureLE(obj.value, intFigure, floatFigure);
}
/**
* 주어진 수치값의 정수부 자릿수와 소수부 자릿수가 주어진 값보다
* 작거나 같은지 검사하여 그렇다면 true를, 그렇지 않으면 오류 메세지를
* 보여주고 false를 돌려 준다.
*
* @param no 확인할 값.
* @param fieldName 항목명. 오류 메세지를 뿌려 줄 때 사용한다.
* @param intFigure 정수부 자릿수
* @param floatFigure 소수부 자릿수. 없으면 검사하지 않는다.
*/
function validateNoFigureLE(no, fieldName, intFigure, floatFigure) {
var checkRes = checkNoFigureLE(no, intFigure, floatFigure);
if ( checkRes > 0 ) {
var msg = fieldName + "의 값은 ";
if ( floatFigure == undefined || floatFigure <= 0 ) {
/* 소수부가 없거나 혹은 0이하인 경우. */
msg += intFigure + " 자리 이하이어야 합니다."
}
else {
/* 소수부도 있는 경우. */
msg += " 정수부가 " + intFigure + "자리 이하, 소수부가 " + floatFigure + "자리 이하이어야 합니다.";
}
showMessage(msg);
}
return checkRes == 0;
}
/**
* 주어진 객체의 수치값의 정수부 자릿수와 소수부 자릿수가 주어진 값보다
* 작거나 같은지 검사하여 그렇다면 true를, 그렇지 않으면 오류 메세지를
* 보여주고 false를 돌려 준다.
*
* @param noObj 확인할 값을 가지고 있는 객체.
* @param fieldName 항목명. 오류 메세지를 뿌려 줄 때 사용한다.
* @param intFigure 정수부 자릿수
* @param floatFigure 소수부 자릿수. 없으면 검사하지 않는다.
*/
function validateNoFigureLEObj(noObj, fieldName, intFigure, floatFigure) {
var valid = validateNoFigureLE(noObj.value, fieldName, intFigure, floatFigure);
if ( ! valid ) {
noObj.focus();
}
return valid;
}
/**
* 주어진 값이 비교 값과 같은지 비교하여
* 그렇다면 true를 그렇지 않으면 false를 돌려 준다.
*
* @param no 비교 대상 수치값. 자릿수 등이 들어간 수치형 문자열일 수도 있다.
* @param comp 비교 값. no 값을 이 값과 비교하여 같은지 확인한다.
*/
function checkNoEQ(no, comp) {
/* 값이 없으면 true를 돌려 준다. */
if ( isEmpty(no) ) return true;
if ( ! checkParamForNo(no, comp) ) return false;
/* 자릿수를 제거하고 수치형으로 변환한다. */
var noValue = parseInt(removeChar(no , ","), 10);
var compValue = parseInt(removeChar(comp, ","), 10);
return noValue == compValue
}
function checkNoEQObj(obj, comp) {
return checkNoEQ(obj.value, comp);
}
function checkParamForNo(no, comp) {
/* 비교 값이 없으면 메세지를 보여 준다. */
if ( isEmpty(comp) ) {
showMessage("파라미터인 comp 값이 넘어오지 않았습니다.");
return false;
}
/* 비교대상 값이 수치인지 확인한다. */
if ( ! checkNumber(no) ) {
showMessage("파라미터 no 의 값이 수치값이 아닙니다: " + no);
return false;
}
/* 비교 값이 수치인지 확인한다. */
if ( ! checkNumber(comp) ) {
showMessage("파라미터 comp 의 값이 수치값이 아닙니다: " + comp);
return false;
}
return true;
}
/**
* no 값이 comp 값보다 작거나 같은지 검사하여
* 그렇다면 true를 그렇지 않으면 오류 메세지를 보여주고 false를 돌려 준다.
*
* @param fieldName 검사 항목 명.
* @param no 비교 대상 수치값. 자릿수 등이 들어간 수치형 문자열일 수도 있다.
* @param comp 비교 값. no 값을 이 값과 비교하여 같은지 확인한다.
*/
function validateNoEQ(no, fieldName, comp) {
var valid = checkNoEQ(no, comp);
if ( ! valid ) {
showMessage(fieldName + " 항목의 값은 " + comp + "과 같아야 합니다.");
}
return valid;
}
/**
* noObj의 값이 comp 값보다 작거나 같은지 검사하여
* 그렇다면 true를 그렇지 않으면 오류 메세지를 보여주고 커서가 해당 항목에
* 위치하게 한 다음 false를 돌려 준다.
*
* @param fieldName 검사 항목 명.
* @param noObj 비교 대상 수치값을 가지고 있는 객체.
* @param comp 비교 값. no 값을 이 값과 비교하여 같은지 확인한다.
*/
function validateNoEQObj(noObj, fieldName, comp) {
var valid = validateNoEQ(noObj.value, fieldName, comp);
if ( ! valid ) noObj.focus();
return valid;
}
/**
* 주어진 값이 비교 값보다 작은지 비교하여
* 그렇다면 true를 그렇지 않으면 false를 돌려 준다.
*
* @param no 비교 대상 수치값. 자릿수 등이 들어간 수치형 문자열일 수도 있다.
* @param comp 비교 값. no 값을 이 값과 비교하여 같은지 확인한다.
*/
function checkNoLT(no, comp) {
/* 값이 없으면 true를 돌려 준다. */
if ( isEmpty(no) ) return true;
if ( ! checkParamForNo(no, comp) ) return false;
/* 자릿수를 제거하고 수치형으로 변환한다. */
var noValue = parseInt(removeChar(no , ","), 10);
var compValue = parseInt(removeChar(comp, ","), 10);
return noValue < compValue
}
function checkNoLTObj(obj, comp) {
return checkNoLT(obj.value, comp);
}
/**
* no 값이 comp 값보다 작거나 같은지 검사하여
* 그렇다면 true를 그렇지 않으면 오류 메세지를 보여주고 false를 돌려 준다.
*
* @param fieldName 검사 항목 명.
* @param no 비교 대상 수치값. 자릿수 등이 들어간 수치형 문자열일 수도 있다.
* @param comp 비교 값. no 값을 이 값과 비교하여 같은지 확인한다.
*/
function validateNoLT(no, fieldName, comp) {
var valid = checkNoLT(no, comp);
if ( ! valid ) {
showMessage(fieldName + " 항목의 값은 " + comp + "보다 작아야 합니다.");
}
return valid;
}
/**
* noObj의 값이 comp 값보다 작거나 같은지 검사하여
* 그렇다면 true를 그렇지 않으면 오류 메세지를 보여주고 커서가 해당 항목에
* 위치하게 한 다음 false를 돌려 준다.
*
* @param fieldName 검사 항목 명.
* @param noObj 비교 대상 수치값을 가지고 있는 객체.
* @param comp 비교 값. no 값을 이 값과 비교하여 같은지 확인한다.
*/
function validateNoLTObj(noObj, fieldName, comp) {
var valid = validateNoLT(noObj.value, fieldName, comp);
if ( ! valid ) noObj.focus();
return valid;
}
/**
* 주어진 값이 비교 값보다 작거나 같은지 비교하여
* 그렇다면 true를 그렇지 않으면 false를 돌려 준다.
*
* @param no 비교 대상 수치값. 자릿수 등이 들어간 수치형 문자열일 수도 있다.
* @param comp 비교 값. no 값을 이 값과 비교하여 같은지 확인한다.
*/
function checkNoLE(no, comp) {
/* 값이 없으면 true를 돌려 준다. */
if ( isEmpty(no) ) return true;
if ( ! checkParamForNo(no, comp) ) return false;
/* 자릿수를 제거하고 수치형으로 변환한다. */
var noValue = parseInt(removeChar(no , ","), 10);
var compValue = parseInt(removeChar(comp, ","), 10);
return noValue <= compValue
}
function checkNoLEObj(obj, comp) {
return checkNoLE(obj.value, comp);
}
/**
* no 값이 comp 값보다 작거나 같은지 검사하여
* 그렇다면 true를 그렇지 않으면 오류 메세지를 보여주고 false를 돌려 준다.
*
* @param fieldName 검사 항목 명.
* @param no 비교 대상 수치값. 자릿수 등이 들어간 수치형 문자열일 수도 있다.
* @param comp 비교 값. no 값을 이 값과 비교하여 같은지 확인한다.
*/
function validateNoLE(no, fieldName, comp) {
var valid = checkNoLE(no, comp);
if ( ! valid ) {
showMessage(fieldName + " 항목의 값은 " + comp + "보다 작거나 같아야 합니다.");
}
return valid;
}
/**
* noObj의 값이 comp 값보다 작거나 같은지 검사하여
* 그렇다면 true를 그렇지 않으면 오류 메세지를 보여주고 커서가 해당 항목에
* 위치하게 한 다음 false를 돌려 준다.
*
* @param fieldName 검사 항목 명.
* @param noObj 비교 대상 수치값을 가지고 있는 객체.
* @param comp 비교 값. no 값을 이 값과 비교하여 같은지 확인한다.
*/
function validateNoLEObj(noObj, fieldName, comp) {
var valid = validateNoLE(noObj.value, fieldName, comp);
if ( ! valid ) noObj.focus();
return valid;
}
/**
* 주어진 값이 비교 값보다 큰지 비교하여
* 그렇다면 true를 그렇지 않으면 false를 돌려 준다.
*
* @param no 비교 대상 수치값. 자릿수 등이 들어간 수치형 문자열일 수도 있다.
* @param comp 비교 값. no 값을 이 값과 비교하여 같은지 확인한다.
*/
function checkNoGT(no, comp) {
/* 값이 없으면 true를 돌려 준다. */
if ( isEmpty(no) ) return true;
if ( ! checkParamForNo(no, comp) ) return false;
/* 자릿수를 제거하고 수치형으로 변환한다. */
var noValue = parseInt(removeChar(no , ","), 10);
var compValue = parseInt(removeChar(comp, ","), 10);
return noValue > compValue;
}
function checkNoGTObj(obj, comp) {
return checkNoGT(obj.value, comp);
}
/**
* no 값이 comp 값보다 큰지 검사하여
* 그렇다면 true를 그렇지 않으면 오류 메세지를 보여주고 false를 돌려 준다.
*
* @param fieldName 검사 항목 명.
* @param no 비교 대상 수치값. 자릿수 등이 들어간 수치형 문자열일 수도 있다.
* @param comp 비교 값. no 값을 이 값과 비교하여 같은지 확인한다.
*/
function validateNoGT(no, fieldName, comp) {
var valid = checkNoGT(no, comp);
if ( ! valid ) {
showMessage(fieldName + " 항목의 값은 " + comp + "보다 커야 합니다.");
}
return valid;
}
/**
* noObj의 값이 comp 값보다 큰지 검사하여
* 그렇다면 true를 그렇지 않으면 오류 메세지를 보여주고 커서가 해당 항목에
* 위치하게 한 다음 false를 돌려 준다.
*
* @param fieldName 검사 항목 명.
* @param noObj 비교 대상 수치값을 가지고 있는 객체.
* @param comp 비교 값. no 값을 이 값과 비교하여 같은지 확인한다.
*/
function validateNoGTObj(noObj, fieldName, comp) {
var valid = validateNoGT(noObj.value, fieldName, comp);
if ( ! valid ) noObj.focus();
return valid;
}
/**
* 주어진 값이 비교 값보다 크거나 같은지 비교하여
* 그렇다면 true를 그렇지 않으면 false를 돌려 준다.
*
* @param no 비교 대상 수치값. 자릿수 등이 들어간 수치형 문자열일 수도 있다.
* @param comp 비교 값. no 값을 이 값과 비교하여 같은지 확인한다.
*/
function checkNoGE(no, comp) {
/* 값이 없으면 true를 돌려 준다. */
if ( isEmpty(no) ) return true;
if ( ! checkParamForNo(no, comp) ) return false;
/* 자릿수를 제거하고 수치형으로 변환한다. */
var noValue = parseInt(removeChar(no , ","), 10);
var compValue = parseInt(removeChar(comp, ","), 10);
return noValue >= compValue
}
function checkNoGEObj(obj, comp) {
return checkNoGE(obj.value, comp);
}
/**
* no 값이 comp 값보다 크거나 같은지 검사하여
* 그렇다면 true를 그렇지 않으면 오류 메세지를 보여주고 false를 돌려 준다.
*
* @param fieldName 검사 항목 명.
* @param no 비교 대상 수치값. 자릿수 등이 들어간 수치형 문자열일 수도 있다.
* @param comp 비교 값. no 값을 이 값과 비교하여 같은지 확인한다.
*/
function validateNoGE(no, fieldName, comp) {
var valid = checkNoGE(no, comp);
if ( ! valid ) {
showMessage(fieldName + " 항목의 값은 " + comp + "보다 크거나 같아야 합니다.");
}
return valid;
}
/**
* noObj의 값이 comp 값보다 크거나 같은지 검사하여
* 그렇다면 true를 그렇지 않으면 오류 메세지를 보여주고 커서가 해당 항목에
* 위치하게 한 다음 false를 돌려 준다.
*
* @param fieldName 검사 항목 명.
* @param noObj 비교 대상 수치값을 가지고 있는 객체.
* @param comp 비교 값. no 값을 이 값과 비교하여 같은지 확인한다.
*/
function validateNoGEObj(noObj, fieldName, comp) {
var valid = validateNoGE(noObj.value, fieldName, comp);
if ( ! valid ) noObj.focus();
return valid;
}