생년월일 입력시 연속 숫자 금지.. 채택완료
길동엉아
1년 전
조회 8,805
</p>
<p>function onlyNumber(){</p>
<p> const reg = /\D/g;</p>
<p> event.target.value = event.target.value.replace(reg, "");</p>
<p> let date = document.querySelector("#shengri");</p>
<p> </p>
<p> // 문자열, 하이픈을 막기 위해 input event 사용</p>
<p> date.addEventListener("input", () => {</p>
<p> </p>
<p> // 사용자 입력값은 모두 숫자만 받는다.(나머지는 ""처리)</p>
<p> let val = date.value.replace(/\D/g, "");</p>
<p> let leng = val.length;</p>
<p> </p>
<p> // 출력할 결과 변수</p>
<p> let result = '';</p>
<p> </p>
<p> // 5개일때 - 20221 : 바로 출력</p>
<p> if(leng < 6) result = val;</p>
<p> // 6~7일 때 - 202210 : 2022-101으로 출력</p>
<p> else if(leng < 8){</p>
<p> result += val.substring(0,4);</p>
<p> result += "-";</p>
<p> result += val.substring(4);</p>
<p> // 8개 일 때 - 2022-1010 : 2022-10-10으로 출력</p>
<p> } else{</p>
<p> result += val.substring(0,4);</p>
<p> result += "-";</p>
<p> result += val.substring(4,6);</p>
<p> result += "-";</p>
<p> result += val.substring(6);</p>
<p> }</p>
<p> date.value = result;</p>
<p> </p>
<p> })</p>
<p>}</p>
<p>
생년월일을 입력받고 있는데
같은 숫자를 8번 치거나
예) 00000000, 11111111, 22222222
또는 12121212식으로 입력이 안되도록 하려면 어떻게 해야 할까요..
초보라 구글링을 해도 잘 모르겠네요 ㅠㅠ
댓글을 작성하려면 로그인이 필요합니다.
답변 2개
채택된 답변
+20 포인트
1년 전
맞게 수정한지는 모르겠지만 아래 소스코드 남깁니다.
</p>
<p>function onlyNumber() {
const reg = /\D/g;
event.target.value = event.target.value.replace(reg, "");
let date = document.querySelector("#shengri");</p>
<p> // 문자열, 하이픈을 막기 위해 input event 사용
date.addEventListener("input", () => {
// 사용자 입력값은 모두 숫자만 받는다.(나머지는 ""처리)
let val = date.value.replace(/\D/g, "");
let leng = val.length;</p>
<p> // 출력할 결과 변수
let result = '';</p>
<p> // 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);
}</p>
<p> // 같은 번호 연속으로 입력 방지
if (result.length > 1 && result[result.length - 1] === result[result.length - 2]) {
result = result.substring(0, result.length - 1);
}</p>
<p> date.value = result;
});
}
</p>
<pre tabindex="0">
<code data-lang="htmlmixed" id="actual-html-code"><input type="text" oninput="</code>onlyNumber<code data-lang="htmlmixed">()"></code></pre>
<p>
로그인 후 평가할 수 있습니다
답변에 대한 댓글 1개
�
길동엉아
1년 전
감사합니다. ㅠㅠ
댓글을 작성하려면 로그인이 필요합니다.
1년 전
다음을 참고해서 수정하시면 되지 않을까 합니다.
</p>
<p>function onlyNumber() {
const reg = /\D/g;
let date = document.querySelector("#shengri");</p>
<p> // 문자열, 하이픈을 막기 위해 input event 사용
date.addEventListener("input", (event) => {
// 사용자 입력값은 모두 숫자만 받는다.(나머지는 ""처리)
let val = date.value.replace(/\D/g, "");
let leng = val.length;</p>
<p> // 출력할 결과 변수
let result = '';</p>
<p> // 8개 이상이면 처리하지 않음
if (leng >= 8) {
date.value = date.value.slice(0, 8);
return;
}</p>
<p> // 동일한 숫자로만 이루어진 경우나 일련 번호 패턴을 확인
if (/^(\d)\1+$/.test(val) || /^(?:(\d)\1)+$/.test(val)) {
// 동일한 숫자로만 이루어진 경우나 일련 번호 패턴을 입력한 경우
date.value = date.value.slice(0, -1); // 마지막 입력값 제거
return;
}</p>
<p> // 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;
});
}
로그인 후 평가할 수 있습니다
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인