const memberNickname = document.querySelector("#memberNickname");
const nickMessage = document.querySelector("#nickMessage");
memberNickname.addEventListener("input", e => {
const inputNickname = e.target.value;
// 1) 입력 안한 경우
if(inputNickname.trim().length === 0) {
nickMessage.innerText = "한글, 영어, 숫자로만 2~10글자";
nickMessage.classList.remove('error', 'confirm');
checkObj.memberNickname = false;
memberNickname.value = "";
return;
}
// 2) 정규식 검사
const regExp = /^[가-힣\w\d]{2,10}$/;
// 정규식 검사 유효하지 않을 때
if(!regExp.test(inputNickname)) {
nickMessage.innerText = "닉네임이 유효하지 않습니다.";
nickMessage.classList.add("error");
nickMessage.classList.remove("confirm");
checkObj.memberNickname = false;
return;
}
// 3) 중복 검사(유효한 경우)
fetch("/member/checkNickname?memberNickname=" + inputNickname)
.then(resp => resp.text())
.then(count => {
// 중복 되는 경우
if(count == 1) {
nickMessage.innerText = "이미 사용중인 닉네임입니다.";
nickMessage.classList.add('error');
nickMessage.classList.remove('confirm');
checkObj.memberNickname = false;
return;
}
// 중복 아닐 때
nickMessage.innerText = "사용 가능한 닉네임입니다.";
nickMessage.classList.add('confirm');
nickMessage.classList.remove('error');
checkObj.memberNickname = true;
})
.catch(err => console.log(err));
});
MemberController
@ResponseBody
@GetMapping("checkNickname")
public int checkNickname(@RequestParam("memberNickname") String memberNickname) {
return service.checkNickname(memberNickname);
}
MemberServiceImpl
@Override
public int checkNickname(String memberNickname) {
return mapper.checkNickname(memberNickname);
}
MemberMapper
int checkNickname(String memberNickname);
member-mapper.xml
<select id="checkNickname" resultType="_int">
SELECT COUNT(*)
FROM "MEMBER"
WHERE MEMBER_DEL_FL = 'N'
AND MEMBER_NICKNAME = #{memberNickname}
</select>
결과 화면

정규식 검사만 하면 됨
const memberTel = document.querySelector("#memberTel");
const telMessage = document.querySelector("#telMessage");
memberTel.addEventListener("input", e => {
const inputMemberTel = e.target.value;
// 입력 안한 경우
if(inputMemberTel.trim().length === 0) {
telMessage.innerText = "전화번호를 입력해주세요.(- 제외)";
telMessage.classList.remove("error", "confirm");
checkObj.memberTel = false;
memberTel.value = "";
return;
}
// 정규식 검사
const regExp = /^01[0-9]{1}[0-9]{3,4}[0-9]{4}$/;
if(!regExp.test(inputMemberTel)) { // 유효하지 않을 때
telMessage.innerText = "유효하지 않은 전화번호 형식입니다.";
telMessage.classList.add('error');
telMessage.classList.remove('confirm');
checkObj.memberTel = false;
return;
}
// 유효할 때
telMessage.innerText = "유효한 전화번호 형식입니다.";
telMessage.classList.add('confirm');
telMessage.classList.remove('error');
checkObj.memberTel = true;
console.log(checkObj);
});
출력 화면

여기까지가 필수 입력 창
