2010-12-13 14 views
70

Können Sie bitte den bestmöglichen Weg vorschlagen, eine alphanumerische Überprüfung eines INPUT-Feldes in JSP durchzuführen? Ich habe meine aktuellen Code angebracht, und ich weiß nicht, wo seine nahezu perfekt :)Der beste Weg zum alphanumerischen Einchecken Javascript

<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;  
    } 

+1

10 Hängt davon ab, wie Sie "am besten" definieren. Die meisten Antworten unten schlagen Regex vor, das [viel langsamer als Ihr ursprünglicher Code] (http://jsperf.com/alphanumeric-charcode-vs-regexp) ausführt. Ich habe deinen Code etwas aufgeräumt (http://stackoverflow.com/a/25352300/388639), was wirklich sehr gut funktioniert. –

Antwort

65

können Sie verwenden this regex/^[a-z0-9]+$/i

+3

natürlich vorausgesetzt, dass die leere Zeichenfolge ('" "') nicht übereinstimmen sollte. – zzzzBov

+0

Das ist cool :) Regex ist süß – t0mcat

+0

Es ist gut, aber wie wäre es mit Nicht-ASCII-Zeichen? – Oybek

30

Sie brauchen nicht es einer nach dem anderen zu tun. Führen Sie einfach einen Test für alle aus, die nicht alphanumerisch sind. Wenn einer gefunden wird, schlägt die Validierung fehl.

function validateCode(){ 
    var TCode = document.getElementById('TCode').value; 
    if(/[^a-zA-Z0-9]/.test(TCode)) { 
     alert('Input is not alphanumeric'); 
     return false; 
    } 
    return true;  
} 

Wenn es mindestens eine Übereinstimmung eines nicht alphanumerisch ist, wird es return false.

26

Überprüfen Sie es mit einem Regex.

Javascript regexen nicht POSIX Zeichenklassen hat, so Sie haben Charakter zu schreiben, reicht manuell:

if (!input_string.match(/^[0-9a-z]+$/)) 
    show_error_or_something() 

Hier ^ bedeutet Beginn der Zeichenfolge und $ bedeutet Ende der Zeichenkette, und [0-9a-z]+ bedeutet eine oder mehr von Zeichen von 0 bis 9 ODER von a bis z.

Mehr Informationen über Javascript regexen hier: https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions

+11

+1 für die Erläuterung der grundlegenden Regex und die Verknüpfung mit einem Handbuch, anstatt dem Benutzer ein " magische Schnur ". –

+4

müssen Sie AZ hinzufügen – inor

5
// On keypress event call the following method 
    function AlphaNumCheck(e) { 
     var charCode = (e.which) ? e.which : e.keyCode; 
     if (charCode == 8) return true; 

     var keynum; 
     var keychar; 
     var charcheck = /[a-zA-Z0-9]/; 
     if (window.event) // IE 
     { 
      keynum = e.keyCode; 
     } 
     else { 
      if (e.which) // Netscape/Firefox/Opera 
      { 
       keynum = e.which; 
      } 
      else return true; 
     } 

     keychar = String.fromCharCode(keynum); 
     return charcheck.test(keychar); 
    } 

Ferner this article auch JavaScript alphanumerische Validierung verstehen hilft.

5

würde ich eine String Prototyp-Methode erstellen:

String.prototype.isAlphaNumeric = function() { 
    var regExp = /^[A-Za-z0-9]+$/; 
    return (this.match(regExp)); 
}; 

Dann würde die Nutzung sein:

var TCode = document.getElementById('TCode').value; 
return TCode.isAlphaNumeric() 
+1

[Keepable JavaScript: Ändern Sie keine Objekte, die Sie nicht besitzen] (http://www.nczonline.net/blog/2010/03/02/maintainable-javascript-dont-modify-objects -you-down-own /) – SeinopSys

+2

DJDavid98: Ich denke nicht, dass die Regel "Objekte, die Sie nicht besitzen, nicht modifizieren" hier gilt. Justin hat gerade die Fähigkeiten von String erweitert und die bestehenden Funktionalitäten nicht verändert. Für die Perspektive würde dies in C# -Welt als eine vollkommen gültige Verwendung einer Erweiterungsmethode angesehen werden. Selbst wenn eines Tages "String.isAlphaNumeric(): boolean" von Browser-Herstellern implementiert würde, würden sich weder die Signatur noch die Aktion tatsächlich ändern, so dass ich in diesem speziellen Beispiel keine Reduktionen der Wartbarkeit sehen kann. Dass etwas eine Regel ist, bedeutet nicht, dass es keine Ausnahmen gibt. –

40

Die ursprüngliche Neigung der Fragesteller als die reguläre Ausdruck Alternative zu schneller zu verwenden str.charCodeAt(i) erscheint. In my test on jsPerf führt die RegExp-Option in Chrome 36 66% langsamer (und in Firefox 31 etwas langsamer) aus.

Hier ist eine aufgeräumte Version des ursprünglichen Validierungscode, der eine Zeichenfolge empfängt und sendet true oder false:

function isAlphaNumeric(str) { 
    var code, i, len; 

    for (i = 0, len = str.length; i < len; i++) { 
    code = str.charCodeAt(i); 
    if (!(code > 47 && code < 58) && // numeric (0-9) 
     !(code > 64 && code < 91) && // upper alpha (A-Z) 
     !(code > 96 && code < 123)) { // lower alpha (a-z) 
     return false; 
    } 
    } 
    return true; 
}; 

Natürlich kann es andere Überlegungen, wie die Lesbarkeit. Ein einzeiliger regulärer Ausdruck ist definitiv hübscher anzusehen. Aber wenn Sie sich ausschließlich mit Geschwindigkeit befassen, sollten Sie diese Alternative in Betracht ziehen.

+8

Programmierer lieben das Aussehen von Code, aber Sie sehen seine innere Schönheit. – Ziggy

Verwandte Themen