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

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

QA

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

답변 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);
    }
    date.value = result;
 
    })
}

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

같은 숫자를 8번 치거나 

예) 00000000, 11111111, 22222222

 

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

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

이 질문에 댓글 쓰기 :

답변 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 (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()">

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


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;
    });
}
답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 24
© SIRSOFT
현재 페이지 제일 처음으로