Gernot Back: Sonderzeichen abfangen - Nur die guten ins Töpfchen

Beitrag lesen

Hallo an alle,

ich suche eine Javascriptlösung, um Sonderzeichen abzufangen, die in einer URI Probleme bereiten.

Hintergrund ist, dass sich auf der "Clanseite" ;-), an der ich gerade arbeite, Unterclans gründen können und aus dem gewählten Namen des Unterclans eine für alle Browser taugliche Internetadresse generiert werden soll, unter der man diesen Unterclan dann zukünftig direkt erreichen kann. Das Ganze soll lesbar und einprägsam sein, also ohne Encode-Geschichten!

Der von mir gegründete Unterclan heißt z.B. "Die Erdbeeren-Diätbären"

Das System der Hauptclanseite macht mir da serverseitig schon mal den Vorschlag, dass mein Unterclan zukünftig direkt über folgende Adresse erreichbar sein soll.

http://www.meinLieberClan.de/Die-Erdbeeren-Diaetbaeren

Nun soll mir als Gründer des Unterclans aber auch die Möglichkeit gegeben werden, diese Adresse zu ändern.

Ich hätte das z.B. lieber alles klein geschrieben und in einem Wort.

Auch da würde es spätestens serverseitig wieder abgefangen, wenn ich nun doch wieder ein Sonderzeichen eingäbe. Wir hätten es nun aber gerne so, dass mir da auch clientseitig und vor dem Abschicken das System einen Hinweis gäbe, sobald ich ein unerlaubtes Zeichen eingebe.

Ich habe auch bereits eine Lösung gefunden, die mir allerdings recht umständlich erscheint. Dabei speichere ich alle ASCII-Codes unerwünschter Zeichen in ein Array und falls document.onkeypress der Keycode mit einem dieser Tabuzeichen übereinstimmen sollte, bekomme ich eine Meldung und die Annahme des Zeichens in ein bestimmtes Eingabefeld (im Beispiel das zweite) wird verweigert.

Ich habe es auch mit regulären Ausdrücken versucht. Das Problem dabei: Die erste Pechmarie(Sonderzeichen) fällt mir jeweils in den Brunnen und eine folgende Goldmarie(kein Sonderzeichen) wird aber dann auch gleich mit dem Bade ausgeschüttet(die macht zwar dann ihre vorangegangene böse Schwester im Eingabefeld unschädlich, wird selbst aber auch nicht angenommen).

Ich habe es mit den Eventhandlern onkeypress, onkeydown und onkeyup versucht. Die beiden letzteren sind aber eher noch ungünstiger.

Gibt es wirklich keine Lösung mit regulären Ausdrücken?

Gruß Gernot

Nachfolgend mein Code, wo ihr durch Umkommentieren mal meine Lösung und meinen gescheiterten Versuch testen könnt:

  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
<html>  
<head>  
<title>Tasten sperren</title>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  
</head>  
<body>  
<form name="meinForm" action="" method="" target="">  
<textarea name="meineArea" cols="20" rows="5"></textarea><br />  
<input type="Text" name="eing" value="" size="20" onblur="[code lang=javascript]flag=false
~~~" onfocus="`flag=true`{:.language-javascript}" />  
</form>  
<script type="text/javascript">  
~~~javascript
  
var flag;  
  
var tabu = new Array();  
  
for (i=0; i<8 ; i++ ) {  
  tabu[i]=i;  
}  
// 8: Backspace  
for (i=9; i<45 ; i++ ) {  
  tabu.push(i);  
}  
// 45: Minuszeichen  
for (i=46; i<48 ; i++ ) {  
  tabu.push(i);  
}  
// 48-57: Dezimalziffern  
for (i=58; i<65 ; i++ ) {  
  tabu.push(i);  
}  
// 65-90: Großbuchstaben  
for (i=91; i<94 ; i++ ) {  
  tabu.push(i);  
}  
// 95: Unterstrich  
tabu.push(96);  // Hochkomma  
// 97-122: Kleinbuchstaben  
for (i=123; i<256 ; i++ ) {  
  tabu.push(i);  
}  
  
function filtern1 (e) {  
  var keyCode=(e)? e.which :event.keyCode;  
  for (i=0; i< tabu.length; i++) {  
    if(flag&&(keyCode == tabu[i])){  
      alert('Sonderzeichen!');  
      return false;  
    }  
  }  
}  
  
var suche = /\W/;  
  
function filtern2 () {  
  kette = document.forms.meinForm.eing.value;  
  if(flag&&suche.test(kette)){  
    document.forms.meinForm.eing.value = kette.replace(suche,"");  
    return false;  
  }  
}  
document.onkeypress=filtern1;  
//document.onkeypress=filtern2;

</script>
</body>
</html>[/code]