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

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

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>

 

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

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

회원로그인

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