subsribe 부분에 input type을 email로 주고 required 설정을 줬다.
이메일 형식에 맞지 않거나 입력하지 않으면 저절로 submit이 되야한다.
하지만 저런 식으로 입력을 해도 정상적으로 잘만 작동되는 것을 발견했다..
<form class="subscribeInput">
<img src="img/mail.png" alt="메일 이미지" class="mailImg">
<input type="email" placeholder="Enter your e-mail address" required>
<button class="subscribeButton">Subscribe</button>
</form>
왜 그런지 확인해보니 js코드에서 문제가 발생 한 것..
event.preventDefault때문에 submit부분에서 멈춰버리니 정상적으로 작동되지 않은 것이었다.
subscribeButton.addEventListener('click',(event)=>{
let email=document.querySelector('.subscribeInput> input').value;
event.preventDefault();
if (!email){
alert("이메일을 입력해주세요!");
return;
}
modal.style.display='flex';
//모달창 뜨면 스크롤 막기
document.body.style.overflow='hidden';
})
이것을 해결하기 위해서 예외 처리를 해야 한다.
아무것도 입력하지 않았을 땐 이미 내가 해줬으니email 주소 유효성 검사를 추가로 해주기로 했다.
대표적인 플래그
i : 대소문자 구분하지 않는다.
g : 문자열 내의 모든 패턴을 검색한다.
m : 문자열의 행이 바뀌더라도 검색은 계속한다.
/^[a-zA-Z0-9]([-_.]?[0-9a-zA-Z])*@[a-zA-Z0-9.-]([-_.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,4}$/i
[a-zA-Z0-9._-]
= 영어 대소문자, 숫자 , . , _ , -가 올 수 있다.([-_.]?[0-9a-zA-Z])*
[-_.]?
= - , _ , . 셋 중 하나의 문자가 최대 1개까지 올 수 있다.[0-9a-zA-Z]
: 숫자 영어 대소문자가 올 수 있다.([-_.]?[0-9a-zA-Z])*
: 이러한 문자열이 여러번 있을 수도있고 없을 수도 있다.@[a-zA-Z0-9.-]
= @가 앞에 붙는다.\.[a-zA-Z]{2,4}
= 앞에 .이 있어야하고 뒤에 붙는 영어 문자열은 2개에서 4개까지 가능하다i
: 대소문자 구별하지 않는다.