테스트 사이트 - 개발 중인 베타 버전입니다

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

길동엉아 1년 전 조회 9,341

</p>

<pre data-pm-slice="1 1 []" spellcheck="false">
<code data-code-block-language="markup">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);
        }
</code>        // 같은 번호 연속으로 입력 방지
        if (result.length > 1 && result[result.length - 1] === result[result.length - 2]) {
            result = result.substring(0, result.length - 1);<code data-code-block-language="markup">
        }
        date.value = result;
    });
}</code></pre>

<p><code data-code-block-language="markup">

 

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

 

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

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

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

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

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

 

 

 

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

답변 2개

채택된 답변
+20 포인트

다음을 참고해 보세요

</p>

<p>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;

    });

}</p>

<p>// 같은 숫자로 입력되었는지 확인하는 함수

function isSameNumber(val) {

    return /^(.)\1+$/.test(val);

}</p>

<p>// 같은 연도로 입력되었는지 확인하는 함수

function isSameYear(val) {

    const year = val.substring(0, 4);

    return /^(.)\1+$/.test(year);

}</p>

<p>// 같은 월로 입력되었는지 확인하는 함수

function isSameMonth(val) {

    const month = val.substring(4, 6);

    return /^(.)\1+$/.test(month);

}</p>

<p>// 같은 일로 입력되었는지 확인하는 함수

function isSameDay(val) {

    const day = val.substring(6);

    return /^(.)\1+$/.test(day);

}

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

길동엉아
1년 전
너무 감사합니다. ㅠㅠ
1991-11-10는 입력이 안되네요
웹메이킹
1년 전
다음 부분을 참고해서 수정해 보시는건 어떨까 합니다.
[code]
// 같은 연도로 입력되었는지 확인하는 함수
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);
}
[/code]

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

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

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

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

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

 

</p>

<p><input id="memberYear" placeholder="년">

<input id="memberMonth" placeholder="월">

<input id="memberDay" placeholder="일">

<button id="memberButton" type="button">클릭</button>




<input id="memberYMD" readonly></p>

<p><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></p>

<p>

 

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

길동엉아
1년 전
감사합니다.

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

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

로그인