Jaki jest najlepszy sposób sprawdzenia alfanumerycznego INPUT
pola w JSP
? Załączam mój aktualny kod
<script type="text/javascript">
function validateCode(){
var TCode = document.getElementById('TCode').value;
for(var i=0; i<TCode.length; i++)
{
var char1 = TCode.charAt(i);
var cc = char1.charCodeAt(0);
if((cc>47 && cc<58) || (cc>64 && cc<91) || (cc>96 && cc<123))
{
}
else {
alert('Input is not alphanumeric');
return false;
}
}
return true;
}
javascript
validation
t0mcat
źródło
źródło
Odpowiedzi:
Możesz użyć tego wyrażenia regularnego
/^[a-z0-9]+$/i
źródło
""
) nie powinien być dopasowany.ñ
nie pasuje do wzorca, jednak w pełni poprawny znak UTF-8.charCodeAt()
. Zobacz jsPerf i moją odpowiedź poniżej .Oryginalna skłonność pytającego do użycia
str.charCodeAt(i)
wydaje się szybsza niż alternatywa wyrażenia regularnego. W moim teście na jsPerf opcja RegExp działa o 66% wolniej w przeglądarce Chrome 36 (i nieco wolniej w przeglądarce Firefox 31).Oto oczyszczona wersja oryginalnego kodu walidacji, która otrzymuje ciąg znaków i zwraca
true
lubfalse
:Oczywiście mogą istnieć inne względy, takie jak czytelność. Jednowierszowe wyrażenie regularne jest zdecydowanie ładniejsze. Ale jeśli zależy Ci wyłącznie na szybkości, możesz rozważyć tę alternatywę.
źródło
Sprawdź to za pomocą wyrażenia regularnego.
Wyrażenia regularne Javascript nie mają klas znaków POSIX, więc musisz ręcznie pisać zakresy znaków:
Tutaj
^
oznacza początek ciągu i$
oznacza koniec ciągu i[0-9a-z]+
oznacza jeden lub więcej znaków od0
do9
LUB oda
doz
.Więcej informacji na temat wyrażeń regularnych Javascript tutaj: https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions
źródło
/^[a-z0-9]+$/i
a to obejmie zarówno małe, jak i duże literyNie musisz tego robić pojedynczo. Po prostu zrób test dla tych, które nie są alfanumeryczne. Jeśli zostanie znaleziony, weryfikacja nie powiedzie się.
Jeśli istnieje co najmniej jedno dopasowanie niealfanumeryczne, będzie
return false
.źródło
Stworzyłbym prototypową metodę typu String:
Wtedy użycie byłoby następujące:
źródło
Co więcej, ten artykuł pomaga również zrozumieć alfanumeryczną walidację JavaScript.
źródło
Przepraszam wszystkich, bez kontrowersji. Ale żeby społeczność rozwijała się tak, jak mnie rozwijała przez te lata, dobrze jest zrobić kilka notatek.
Prawdziwy ciąg alfanumeryczny jest podobny,
"0a0a0a0b0c0d"
a nie podobny"000000"
lub"qwertyuio"
.Wszystkie odpowiedzi, które tu przeczytałem,
true
w obu przypadkach wróciły . I wybacz mi, IMHO, to nie jest w porządku .Jeśli chcę sprawdzić, czy mój
"00000"
ciąg jest alfanumem, moja „ludzka” odpowiedź jest niewątpliwie FAŁSZ.Czemu? Prosty. Nie mogę znaleźć żadnej litery. Czyli jest prostym ciągiem liczbowym
[0-9]
.Z drugiej strony, gdybym chciał sprawdzić swój
"abcdefg"
ciąg, moja „ludzka” odpowiedź jest nawet FAŁSZ. Nie widzę liczb, więc nie są alfanumeryczne. Tylko alfa[a-zA-Z]
.Odpowiedź Michaela Martina-Smuckera była pouczająca.
Jednak miał na celu osiągnięcie lepszej wydajności zamiast regex. To prawda, używając niskiego poziomu, uzyskuje się lepszą wydajność. Ale wyniki są takie same. Ciągi
"0123456789"
(tylko numeryczne),"qwertyuiop"
(tylko alfa) i"0a1b2c3d4f4g"
(alfanumeryczne) są zwracaneTRUE
jako alfanumeryczne. Ten sam/^[a-z0-9]+$/i
sposób wyrażenia regularnego . Powód, dla którego wyrażenie regularne nie działa, jest tak prosty, jak oczywisty. Składnia[]
wskazuje lub nie i . Zatem, jeśli składa się tylko z liczb lub tylko z liter, zwraca wyrażenie regularnetrue
.Jednak odpowiedź Michaela Martina-Smuckera była mimo wszystko pouczająca. Dla mnie. Pozwoliło mi to myśleć „na niskim poziomie”, aby stworzyć prawdziwą funkcję, która w sposób jednoznaczny przetwarza ciąg alfanumeryczny. Nazwałem to funkcją względną PHP
ctype_alnum
( edytuj 2020-02-18: Gdzie jednak sprawdza OR, a nie AND ).Oto kod:
... a oto DEMO
Przyszedłem do tej dyskusji, ponieważ szukałem alternatywy w javascript do funkcji PHP. Nie mogę znaleźć odpowiedź „ready-to-Go”, ale jak to często bywa na Stackoverflow, pojęcie wiedzy i porównania z siebie jest czymś wzniosłym, że prowadzi cię do myślenia o czyjąś odpowiedź i znaleźć razem rozwiązanie byłaś szukasz, ale nie sądziłeś, że o tym wiesz.
I udostępnij to!
Najlepsza
Oscar
źródło
return isNumeric || isAlpha;
jest alfanumeryczny. Powyższe może być pomocne dla niektórych.W ciasnej pętli prawdopodobnie lepiej unikać wyrażeń regularnych i zakodować swoje znaki na stałe:
źródło
Aby sprawdzić, czy input_string jest alfanumeryczny, po prostu użyj:
źródło