회원가입에서 생년월을을 받을때 연속 숫자 제한..

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
회원가입에서 생년월을을 받을때 연속 숫자 제한..

QA

회원가입에서 생년월을을 받을때 연속 숫자 제한..

본문



function onlyNumber() {
    const reg = /\D/g;
    event.target.value = event.target.value.replace(reg, "");
    let date = document.querySelector("#shengri");
    // 문자열, 하이픈을 막기 위해 input event 사용
    date.addEventListener("input", () => {
        // 사용자 입력값은 모두 숫자만 받는다.(나머지는 ""처리)
        let val = date.value.replace(/\D/g, "");
        let leng = val.length;
        // 출력할 결과 변수
        let result = '';
        // 5개일때 - 20221 : 바로 출력
        if (leng < 6) result = val;
        // 6~7일 때 - 202210 : 2022-101으로 출력
        else if (leng < 8) {
            result += val.substring(0, 4);
            result += "-";
            result += val.substring(4);
        // 8개 일 때 - 2022-1010 : 2022-10-10으로 출력
        } else {
            result += val.substring(0, 4);
            result += "-";
            result += val.substring(4, 6);
            result += "-";
            result += val.substring(6);
        }
        // 같은 번호 연속으로 입력 방지
        if (result.length > 1 && result[result.length - 1] === result[result.length - 2]) {
            result = result.substring(0, result.length - 1);
        }
        date.value = result;
    });
}

 

어제 위와 같은 질문으로 도움을 받았는데 문제가 발생하여 다시 도움을 구해봅니다..

 

원래의 목적은 0000-00-00, 1111-11-11 혹시 1212-12-12

이와같은 번호를 입력 방지하려고 했는데

생년에 같은 숫가 들어가거나 (예: 1990,2000)

연,월,일에 같은 숫자가 포함되면 (예: 1990-02-25, )

입력이 안되는데 이걸 해결하려고 하는데 잘 안되서 질문드립니다..ㅠㅠ

 

 

 

이 질문에 댓글 쓰기 :

답변 2

다음을 참고해 보세요


function onlyNumber() {
    const reg = /\D/g;
    event.target.value = event.target.value.replace(reg, "");
    let date = document.querySelector("#shengri");
    // 문자열, 하이픈을 막기 위해 input event 사용
    date.addEventListener("input", () => {
        // 사용자 입력값은 모두 숫자만 받는다.(나머지는 ""처리)
        let val = date.value.replace(/\D/g, "");
        let leng = val.length;
        // 출력할 결과 변수
        let result = '';
        // 5개일때 - 20221 : 바로 출력
        if (leng < 6) result = val;
        // 6~7일 때 - 202210 : 2022-101으로 출력
        else if (leng < 8) {
            result += val.substring(0, 4);
            result += "-";
            result += val.substring(4);
        // 8개 일 때 - 2022-1010 : 2022-10-10으로 출력
        } else {
            result += val.substring(0, 4);
            result += "-";
            result += val.substring(4, 6);
            result += "-";
            result += val.substring(6);
        }
        // 같은 번호 연속으로 입력 방지 및 연, 월, 일이 같은 숫자인 경우 처리
        if (isSameNumber(val) || isSameYear(val) || isSameMonth(val) || isSameDay(val)) {
            result = "";
        }
        date.value = result;
    });
}
// 같은 숫자로 입력되었는지 확인하는 함수
function isSameNumber(val) {
    return /^(.)\1+$/.test(val);
}
// 같은 연도로 입력되었는지 확인하는 함수
function isSameYear(val) {
    const year = val.substring(0, 4);
    return /^(.)\1+$/.test(year);
}
// 같은 월로 입력되었는지 확인하는 함수
function isSameMonth(val) {
    const month = val.substring(4, 6);
    return /^(.)\1+$/.test(month);
}
// 같은 일로 입력되었는지 확인하는 함수
function isSameDay(val) {
    const day = val.substring(6);
    return /^(.)\1+$/.test(day);
}

다음 부분을 참고해서 수정해 보시는건 어떨까 합니다.


// 같은 연도로 입력되었는지 확인하는 함수
function isSameYear(val) {
    const year = val.substring(0, 4);
    return /^(.)\1{3}$/.test(year);
}

// 같은 월로 입력되었는지 확인하는 함수
function isSameMonth(val) {
    const month = val.substring(4, 6);
    return /^(.)\1{1}$/.test(month);
}

// 같은 일로 입력되었는지 확인하는 함수
function isSameDay(val) {
    const day = val.substring(6);
    return /^(.)\1{1}$/.test(day);
}

그냥 년월일을 각기 따로 받으세요.

아래 예제는 1950년부터 2000년생까지입니다.

그리고 31일까지 했는데 2월달처럼 28일 내지는 29일까지 있는 것은 조건문을 재주껏 더 첨가하세요.

코드확인 - https://wittazzurri.com/editor/html_editor.php

 


<input id="memberYear" placeholder="년">
<input id="memberMonth" placeholder="월">
<input id="memberDay" placeholder="일">
<button id="memberButton" type="button">클릭</button>
<br>
<input id="memberYMD" readonly>
<script>
memberButton.onclick = function() {
    isYear = Number(memberYear.value) >= 1950 && Number(memberYear.value) <= 2000;
    isMonth = Number(memberMonth.value) >= 1 && Number(memberMonth.value) <= 12;
    isDay = Number(memberDay.value) >= 1 && Number(memberDay.value) <= 31;
    if (isYear && isMonth && isDay) {
        memberYMD.value = memberYear.value.slice(-4) + "-" + ("0" + memberMonth.value).slice(-2) + "-" + ("0" + memberDay.value).slice(-2);
    }
    else {
        alert("입력오류");
        memberYear.value = memberMonth.value = memberDay.value = memberYMD.value = "";
    }
}
</script>

 

작성하고 나니 이미 다른 분이 채택되었네요.ㅜㅠ

답변을 작성하시기 전에 로그인 해주세요.
전체 947
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT