2012-11-05 10 views
23

Powiel możliwe:
How to prevent users from entering invalid characters inside an input fieldUmożliwienie tylko alfanumeryczne wartości

mam 3 pola tekstowe na stronie. Jeden z nich powinien zezwalać na liczby, inne alfabety i 3. cyfry albo alfabety.

Ponieważ jest to jedyny wymóg, nie chcę używać wtyczki sprawdzania poprawności ani żadnej innej wtyczki innej firmy. Jak mogę to zrobić, tworząc własną wtyczkę za pomocą czystego jQuery?

To, co zrobiłem, ale mam wrażenie, że kod będzie stać zbyt długo

$(this).keydown(function(e) 
     { 
      var key = e.charCode || e.keyCode || 0;    
      return (
       key == 8 || 
       key == 9 || 
       key == 46 || 
       (key >= 37 && key <= 40) || 
       (key >= 48 && key <= 57) || 
       (key >= 96 && key <= 105)); 
     }); 

http://jsfiddle.net/Cvus8/

Czy ktoś może mi powiedzieć co SI najlepszy sposób podejścia do tego problemu?

+1

Regex może być rozwiązaniem dla minimalizacji rozmiaru kodu, ale trzeba będzie kopać dalej. – Scorpio

+2

Nie zapominaj, że użytkownicy mogą również wklejać tekst ze schowka, a także różnice lokalizacji w zestawach znaków. –

+0

jak obsługiwać scenariusze ze schowka? – KayKay

Odpowiedz

43

Lepszym rozwiązaniem może być uruchamiany za pomocą sprawdzania opartego na wyrażeniach regularnych. Przykład poniżej ograniczy tylko znaki alfanumeryczne w polu id text:

$('#text').keypress(function (e) { 
    var regex = new RegExp("^[a-zA-Z0-9]+$"); 
    var str = String.fromCharCode(!e.charCode ? e.which : e.charCode); 
    if (regex.test(str)) { 
     return true; 
    } 

    e.preventDefault(); 
    return false; 
}); 
+2

to nie działa w przypadku symboli takich jak! @ # $%^& *() – CountMurphy

+1

@CountMurphy Wyrażenie regularne w odpowiedzi ma na celu zezwalanie tylko na wielkie/małe litery i cyfry. Nie pozwala na symbole według projektu. Jeśli potrzebujesz symboli, możesz rozwinąć wyrażenie regularne, aby je uwzględnić. – Kami

+0

Wygląda na to, że popełniłem błąd w kodzie testowym. Symbole wymienione powyżej pojawiały się w moim polu tekstowym. Mój błąd, twoje rozwiązanie działa. – CountMurphy

10

Cyfra w przedziale 1-9 następuje zero lub więcej innych cyfr:

^[1-9]\d*$ 

Upewnić się, że ciąg zawiera tylko (ASCII) znaków alfanumerycznych, podkreślenia i obowiązuje

^[\w ]+$ 

Only Alfabety bez spacji lub _

^[a-zA-Z]+$ 

Aby dopasować ciąg zawierający tylko te znaki (Lub ciąg pusty), spróbuj

^[a-zA-Z0-9_]*$ 

pewne wzorce, które mogą pomóc ..ale myślę, trzeba będzie je zmodyfikować według własnych need..I nadzieję, że pomóc ..

Powiązane problemy