html 특수문자 제외하는 정규표현식 질문있습니다!

조회수 897회
<input type="text" name="email1" 
onkeyup="this.value=this.value.replace
(/[\ㄱ-ㅎㅏ-ㅣ가-힣~!@\#$%^&*\()\=+'\;<>\/.\`:\\,\[\]?|{}]/g, '');"/>

큰따옴표도 제외하고 싶은데 앞에 "this.value 이부분 떄문에 겹치네요..

\를 앞에 붙여봐도 똑같습니다..

  • 생각을 바꿔보세요. 제외하고 싶은 것이 아니라 허용하는 것으로 하면 훨씬 간편하지 않을까요? 메일인 것 같은데...메일이면 알파벳과 숫자 그리고 점등의 약간의 기호 정도입니다. 이것만 허용하도록 하면 될 듯 싶고 onkeyup 이벤트도 좋지만 pattern 속성도 알아보세요. 정영훈 2019.11.22 20:47

1 답변

  • 좋아요

    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()가 실행되지 않으므로 입력이 움찔움찔거리지 않고, 브라우저에 따라서는 로컬라이징된 안내 메시지도 친절하게 표출되며, 모바일의 경우 자동으로 이메일 입력 키보드가 뜹니다.

    • 자세히 알려주셔서 너무 감사합니다! 강동우 2019.11.25 14:44

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)