html 특수문자 제외하는 정규표현식 질문있습니다!
조회수 897회
<input type="text" name="email1"
onkeyup="this.value=this.value.replace
(/[\ㄱ-ㅎㅏ-ㅣ가-힣~!@\#$%^&*\()\=+'\;<>\/.\`:\\,\[\]?|{}]/g, '');"/>
큰따옴표도 제외하고 싶은데 앞에 "this.value 이부분 떄문에 겹치네요..
\를 앞에 붙여봐도 똑같습니다..
1 답변
-
1. 궁금하신 것만 답을 드리자면, 이럴 때는, 해당 문자를 유니코드로서 패턴 안에서 지정하시면 됩니다.
"
의 유니코드가U+0022
이므로<input type="text" onkeyup="this.value = this.value.replace(/[\ㄱ-ㅎㅏ-ㅣ가-힣~!@\#$%^&*\()\=+';<>\/.\`:\\,\[\]?|{}\u0022]/g, '');" />
2. 그런데 1번의 방식은 예컨대 사용자가 일본어를 입력할 경우 필터링하지 못합니다. 그래서 정영훈님께서 '허용할 문자만 지정'하자는 제안을 주셨죠. 대충 이렇게 될 겁니다. (핵심은
[^어쩌구]
패턴)<input type="text" onkeyup="this.value = this.value.replace(/[^a-zA-Z0-9\._\-@]/g, '');" />
3. 저라면 이렇게 하겠습니다.
<input type="email" required="required" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$" autocomplete="off" />
데모를 보시면 그럭저럭 잘 작동함을 알 수 있습니다. 뭘 쓸 때마다
replace()
가 실행되지 않으므로 입력이 움찔움찔거리지 않고, 브라우저에 따라서는 로컬라이징된 안내 메시지도 친절하게 표출되며, 모바일의 경우 자동으로 이메일 입력 키보드가 뜹니다.
댓글 입력