2013-09-04 8 views
12

Mam następujący kod, który uniemożliwia użytkownikowi wprowadzenie spacji, gdy długość wynosi 0. Teraz, w jaki sposób mogę zapobiec wprowadzeniu przez użytkownika wszystkich znaków specjalnych (cokolwiek innego niż a-z A-Z 0-9), gdy długość wynosi 0?Jak uniemożliwić użytkownikowi wprowadzanie znaków specjalnych w polu tekstowym, gdy długość wynosi 0?

$('#DivisionName').bind('keypress', function(e) { 
    if($('#DivisionName').val().length == 0){ 
     if (e.which == 32){//space bar 
      e.preventDefault(); 
     } 
    } 
}); 

To jest moje pole tekstowe.

<input type="text" id="DivisionName" /> 
+0

określenie „znaków specjalnych” – musefan

+0

dowolny znak inny niż AZ az 0-9 – Bittu

+0

tak umieścić, że w swoim pytaniu – musefan

Odpowiedz

14

literą i cyfrowe są zakresy (włącznie)

  • 97 - 122 (AZ)
  • 65 - 90 (AZ)
  • 48 - 57 (09)

Oto porównanie e.which z.

if (e.which < 48 || 
    (e.which > 57 && e.which < 65) || 
    (e.which > 90 && e.which < 97) || 
    e.which > 122) { 
    e.preventDefault(); 
} 

Albo, stosując odwrotną logikę:

var valid = (e.which >= 48 && e.which <= 57) || (e.which >= 65 && e.which <= 90) || (e.which >= 97 && e.which <= 122); 
if (!valid) { 
    e.preventDefault(); 
} 

Aktualizacja

Mimo to, nadal można chcieć zweryfikować zawartość pole jako całość za pomocą wyrażenia regularnego:

if (/^[A-Z0-9]+$/i.test(value)) { 
    // it looks okay now 
} 

Lub naprawić pole, zastępując złe rzeczy:

var stripped = value.replace(/[^A-Z0-9]+/i, ''); 
+0

czy możesz dać mi działającą próbkę? – Bittu

+1

Wiedząc, że masz już kod porównania, potrzebujesz prostej modyfikacji. To samo w sobie jest przykładem roboczym. –

+1

Myślę, że przykładowy kod to uczciwa prośba.Nie dlatego, że OP nie może być zawracany, ale ponieważ sprawia, że ​​odpowiedź jest bardziej użyteczna w przyszłości – musefan

-1

Możesz użyć wyrażenia regularnego do sprawdzenia poprawności ciągu znaków. Coś ^[a-zA-z0-9].*

Oto artykuł o testowaniu regex w javascript : http://www.w3schools.com/jsref/jsref_regexp_test.asp

I można nawet powiązać zdarzenie change a nie przyciśnięcie.

+0

Jedynym problemem jest to, że ma on naciśnięcie klawisza, a nie ciąg. Gdyby zmienił swój kod, aby przeczytać zawartość textarea, musiałby zaimplementować rzeczy z zakresami tekstowymi, aby uniknąć przypadkowych skoków kursora. –

+0

Masz całkowitą rację. W każdym razie nadal wygląda to na przypadek prostego sprawdzania poprawności formularza. – Boranas

6

To jest to, czego szukasz:

$('#DivisionName').bind('keypress', function(e) { 

    if($('#DivisionName').val().length == 0){ 
     var k = e.which; 
     var ok = k >= 65 && k <= 90 || // A-Z 
      k >= 97 && k <= 122 || // a-z 
      k >= 48 && k <= 57; // 0-9 

     if (!ok){ 
      e.preventDefault(); 
     } 
    } 
}); 

lub zobaczyć tutaj: http://jsfiddle.net/D4dcg/

+1

shift + dowolna litera z dowolnym numerem, podczas gdy wciąż naciśnięcie klawisza shift powoduje to z łatwością. – mymlyn

Powiązane problemy