채택완료

생년월일 입력시 연속 숫자 금지..

2024-03-05 (화) 19:53:23 9,369
Copy
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);

    }

    date.value = result;

 

    })

}

생년월일을 입력받고 있는데 

같은 숫자를 8번 치거나 

예) 00000000, 11111111, 22222222

또는 12121212식으로 입력이 안되도록 하려면 어떻게 해야 할까요.. 

초보라 구글링을 해도 잘 모르겠네요 ㅠㅠ

답변 2개 / 댓글 1개

채택된 답변
+20 포인트
2024-03-05 (화) 20:03:57

맞게 수정한지는 모르겠지만 아래 소스코드 남깁니다.

Copy
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;
    });
}
 


<input type="text" oninput="onlyNumber()">

답변에 대한 댓글 1개

감사합니다. ㅠㅠ
2024-03-05 (화) 20:00:51

다음을 참고해서 수정하시면 되지 않을까 합니다.

Copy
function onlyNumber() {
    const reg = /\D/g;
    let date = document.querySelector("#shengri");

    // 문자열, 하이픈을 막기 위해 input event 사용
    date.addEventListener("input", (event) => {
        // 사용자 입력값은 모두 숫자만 받는다.(나머지는 ""처리)
        let val = date.value.replace(/\D/g, "");
        let leng = val.length;

        // 출력할 결과 변수
        let result = '';

        // 8개 이상이면 처리하지 않음
        if (leng >= 8) {
            date.value = date.value.slice(0, 8);
            return;
        }

        // 동일한 숫자로만 이루어진 경우나 일련 번호 패턴을 확인
        if (/^(\d)\1+$/.test(val) || /^(?:(\d)\1)+$/.test(val)) {
            // 동일한 숫자로만 이루어진 경우나 일련 번호 패턴을 입력한 경우
            date.value = date.value.slice(0, -1); // 마지막 입력값 제거
            return;
        }

        // 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개 이상이면 처리하지 않음
        } else {
            result += val.substring(0, 4);
            result += "-";
            result += val.substring(4, 6);
            result += "-";
            result += val.substring(6);
        }
        date.value = result;
    });
}

답변을 작성하려면 로그인이 필요합니다.