안녕하세요.

특수문자 입력을 방지하고 있습니다.

input에는 아주 잘 작동하지만

 

contenteditable에서는 작동을 하게 바꾸면

 

한글입력이라고 적으면

아래와 같이 입력이 됩니다.

력려입ㄹ입글이글그한ㄱ하ㅎ

 

이건 input에서 작동하는 소스

var replaceChar = /[~!@\#$%^&*\()\=+_'\;<>\/.\`:\"\\,\[\]?|{}]/gi;
var replaceNotFullKorean = /[ㄱ-ㅎㅏ-ㅣ]/gi;
 
$(document).ready(function(){
     
    $(".inputName").on("focusout", function() {
        var x = $(this).val();
        if (x.length > 0) {
            if (x.match(replaceChar) || x.match(replaceNotFullKorean)) {
                x = x.replace(replaceChar, "").replace(replaceNotFullKorean, "");
            }
            $(this).val(x);
        }
        }).on("keyup", function() {
            $(this).val($(this).val().replace(replaceChar, ""));
 
   });
 
});

 

이건 contenteditable에서 작동하는 소스 val을 text로 변경함.

var replaceChar = /[~!@\#$%^&*\()\=+_'\;<>\/.\`:\"\\,\[\]?|{}]/gi;
var replaceNotFullKorean = /[ㄱ-ㅎㅏ-ㅣ]/gi;
 
$(document).ready(function(){
     
    $(".inputName").on("focusout", function() {
        var x = $(this).text();
        if (x.length > 0) {
            if (x.match(replaceChar) || x.match(replaceNotFullKorean)) {
                x = x.replace(replaceChar, "").replace(replaceNotFullKorean, "");
            }
            $(this).text(x);
        }
        }).on("keyup", function() {
            $(this).text($(this).text().replace(replaceChar, ""));
 
   });
 
});

 

혹시 contenteditable 에서도 특수 문자 입력을 막을 수 있을까요?

감사합니다.

 

적용하려는 이유

 

태그.JPG

  • profile

    contenteditable에서 한글 한 글자(초성+중성+종성)가 완성되기 전에 끼어들어서 내용을 통째로 치환해 버리면 작성 중이던 글자가 분해되는 참사가 일어납니다. 글자가 분해되는 조건은 브라우저마다 제각각인데, 이것 때문에 유명한 위지윅 에디터들도 특정 브라우저, 특정 기기(특히 iOS 계열)에서 한글을 입력할 때 종종 버그를 일으키지요. input이랑은 처리 방식이 달라요.

     

    이미 입력된 내용을 keyup에서 치환하지 말고, 입력해서는 안 되는 키를 누르려고 하면 keydown에서 미리 차단하는 방법으로 해 보세요. 완벽하게 차단되지 않더라도 어차피 focusout에서 한 번 더 걸러낼 테니까요.

  • profile profile

    어 keypress 로 하니 백스페이스가 안먹긴하지만 잘 작동 됩니다