생년월일 입력시 연속 숫자 금지..
본문
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;
});
}
답변을 작성하시기 전에 로그인 해주세요.