2010-08-23 4 views
5

입력 할 수있는 문자를 제한해야하는 입력 텍스트 필드가 있습니다. 잘못된 입력에 대한 방어 방법 중 하나로서 사용자에게 잘못된 것을 입력하십시오. 입력은 [a-zA-Z -._] 문자 일 수 있으며 32 자로 제한됩니다. html 텍스트 필드에 특수 문자 입력 방지

<input id="aliasEntry" type="text" maxlength="32"> 

당신이 볼 수 있듯이

, 나는 이미 32 자 제한이 알아 냈있어, 사용자는 한계에 도달하면 더 이상 입력 방지 할 수있다. 하지만 잘못된 문자 입력을 방지하는 데 문제가 있습니다.

나는 다음과 같은 것을 할() 이벤트 포수를 jQuery의 .keypress()와 .keydown를 사용하여 시도했다 : 브라우저는 항상 입력 된 문자를 삽입하는 것이

$("#aliasEntry").keypress(function(e) 
{ 
    var code = e.which || e.keyCode; 
    // 65 - 90 for A-Z and 97 - 122 for a-z 95 for _ 45 for - 46 for . 
    if (!((code >= 65 && code <= 90) || (code >= 97 && code <= 122) || code == 95 || code == 46 || code == 45)) 
    { 
     var text = $("#aliasEntry").val(); 
     text = text.substring(0,text.length); 
     $("#aliasEntry").val(text); 
    } 
}); 

그러나 이것에 대한 문제를 이벤트가 처리 된 후 텍스트 상자에 입력하면 제거하려고하는 문자가 아직 입력되지 않았기 때문에 코드가 쓸모 없게됩니다. 사용자가 입력 한 후 브라우저가 문자를 텍스트 상자에 삽입하지 못하게하는 방법이 있습니까?

+2

jQuery를 사용할 때 다시 ['e.which'] (http://api.jquery.com/event.which/)를 정규화 할 필요가 없습니다. –

+0

사용자의 키보드가 갑자기 작동하지 않는 이유를 설명하는 UI가있는 것이 가장 좋습니다. – derobert

+2

서버 쪽 유효성 검사도 수행해야합니다. 클라이언트 검증은 바보짓하기가 정말 쉽습니다 (이 경우 브라우저에서 JavaScript를 끄기) –

답변

5

jQuery를 사용하고 있으므로 다음을 참조하십시오. http://api.jquery.com/event.preventDefault/. 문자가 유효하지 않은 경우 e.preventDefault()으로 전화하면 기본 브라우저 동작 (이 경우 문자 삽입)을 방지해야합니다.

+0

그리고'keypress' 중에 그것을하십시오; 오페라에서'keydown' 동안 기본 동작을 막을 수는 없습니다. –

+0

그래 잘 작동합니다. 이벤트가 단순히 중단 될 수 있는지를 판단하기 위해 그 방향을 조사하고 있었지만, 잘못된 방법을 망치고있었습니다. 감사! – JDC

0

function chText() 
{ 
    var str=document.getElementById("aliasEntry"); 
    var regex=/[^a-z]/gi; 
    str.value=str.value.replace(regex ,""); 
} 

아래에이 코드가 어떤 문자가 a-zA-Z

제외하고 입력 할 수 없습니다이

<input maxlength="32" onKeyUp="chText()" onKeyDown="chText()" id="aliasEntry"/> 

처럼 입력을 사용하고 에서 자바 스크립트 쓰기에 chText() 기능을