[JavaScript] Textarea Zeichen zählen, Sonderzeichen extra

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Buzzer, 27. September 2012 .

  1. 27. September 2012
    Textarea Zeichen zählen, Sonderzeichen extra

    Hi Leute,

    JavaScript ist nicht gerade meine Stärke, ich habe ein Textfeld in dem die Zeichen gezählt und in einem anderen Feld die restlichen Zeichen angezeigt werden.

    Code:
    function kontrolle() {
    max = 140;
    anz = document.formular.pushtext.value.length;
    document.formular.anzeige.value = max - anz;
    if(anz >= max) {
    document.formular.pushtext.style.color="#ff0000";
    }else 
    if(anz < max) {
    document.formular.pushtext.style.color="#000000";
    }
    }
    Das klappt auch super.

    Jetzt habe ich aber leider das Problem das mir Sonderzeichen, später, mit 6 Zählern zu buche schlagen, als Umlaute, ß usw.

    Wie kann ich das script jetzt dazu bekommen, bei einem ä oder ö 6 Zeichen abzuziehen statt nur 1?
     
  2. 27. September 2012
    AW: Textarea Zeichen zählen, Sonderzeichen extra

    Kann den Fehler nicht nachvollziehen.
    Bei mir werden Umlaute "ö,ä,ü,ß" oder Sonderzeichen "!"§$%&/()=? etc." mit "-1" berechnet.

    Ist die Datei auch im UTF-8 Format?
    Steht im Header das "Charset" auf "utf-8"
    HTML:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
    
     
    1 Person gefällt das.
  3. 27. September 2012
    AW: Textarea Zeichen zählen, Sonderzeichen extra

    Kurz auf die Schnell geschrieben.
    Geht bestimmt noch besser, aber funktioniert.

    HTML:
    var text = 'Test 1 2 3 ä ö ü P Lßß';
    
    var textLength = text.length;
    var textLengthNormal = textLength;
    
    var specialChars = ['ä','ö','ü','ß']; // Sonderzeichen
    var specialCharVal = 6; // Zeichen-Wert
    
    for( i in specialChars ) {
     
     // Wie oft kommt das Zeichen vor?
     var c = text.split( specialChars[i] ).length - 1;
     
     textLength = textLength - c; // Die anzahl der funde ziehen wir erst einmal ab
     textLength = textLength + ( c * specialCharVal ); // Jetzt addieren wir ( Funde * zeichen-wert)
    }
    
    
    console.log( textLengthNormal +' / '+ textLength );
     
  4. 27. September 2012
    AW: Textarea Zeichen zählen, Sonderzeichen extra

    @BlueSin Kein Fehler ich will etwas hinzufügen

    @nanobyte Danke versuch es gerade einzubauen in mein obiges script, aber irgendwo stimmt was nicht. Ich habe zwar vom Prinzip verstanden was du tust, aber ich glaube mir fehlt wissen ums korrekt einzubauen, auf jeden fall zieht er wenn ich in das Feld einen Umlaut eingebe trotzdem immer nur 1 ab, ich habe mir mal den Wert c anzeigen lassen, dieser ist komischerweise immer null.

    So hab ich es bisher eingebaut:
    Code:
    <!--
    function kontrolle() {
    max = 140;
    textLength = document.formular.pushtext.value.length;
    
    specialChars = ['ä','ö','ü','ß']; // Sonderzeichen
    specialCharVal = 6; // Zeichen-Wert
    
    for( i in specialChars ) {
     
     // Wie oft kommt das Zeichen vor?
     c = document.formular.pushtext.value.split( specialChars[i] ).length-1;
     
     textLength = textLength - c; // Die anzahl der Funde ziehen wir erst einmal ab
     textLength = textLength + ( c * specialCharVal ); // Jetzt addieren wir ( Funde * zeichen-wert)
     
    }
    
    document.formular.anzeige.value = max - textLength;
    if(textLength >= max) {
    document.formular.pushtext.style.color="#ff0000";
    }else 
    if(textLength < max) {
    document.formular.pushtext.style.color="#000000";
    }
    }
    //-->
    Die Funktion wird im übrigen bei jedem Tastendruck aufgerufen.
    onKeyup="kontrolle()"
     
  5. 27. September 2012
    AW: Textarea Zeichen zählen, Sonderzeichen extra

    Ah tut mir leid, habe mich verlesen!

    Das sollte passen.

    Code:
    function kontrolle()
    {
     max = 140;
     val = document.formular.pushtext.value;
     anz = document.formular.pushtext.value.length;
     
     sonderzeichen = val.match(/[^a-z A-Z0-9]/g); //Buchstaben und Zahlen sind keine "Sonderzeichen"
     if(sonderzeichen)
     {
     anz -= sonderzeichen.length;
     anz += (sonderzeichen.length * 6);
     }
     
     document.formular.anzeige.value = max - anz;
     
     if(anz >= max)
     {
     document.formular.pushtext.style.color="#ff0000";
     }
     else 
     if(anz < max)
     {
     document.formular.pushtext.style.color="#000000";
     }
    }
    
    Das Script berechnet 6 Zeichen für jedes Zeichen, welches kein Buchstabe (A-Z) oder eine Zahl ist (0-9).

    Wenn du Ausnahmen hinzufügen möchtest, welche nicht mit 6 Zeichen berechnet werden sollen, müssen diese hier ergänzt werden.

    Code:
    sonderzeichen = val.match(/[^a-z A-Z0-9öäü]/g); // öäü sind nun auch keine Sonderzeichen mehr.
    
    PS: Das Leerzeichen zwischen "a-z" und "A-Z" ist wichtig! Da sonst Leerzeichen auch mit -6 berechnet werden würden!
     
  6. 27. September 2012
    AW: Textarea Zeichen zählen, Sonderzeichen extra

    BOAAA BlueSin Danke ))

    Genau das funktioniert. Danke für die Lösung, auf JavaScript hab ich es einfach nicht gebacken bekommen.
    Hab die ganze Zeit versucht die value von den Sonderzeichen zu befreien, und dann die beiden werte von einander abzuziehen.

    Aber weder Split noch join haben wirklich funktioniert

    Jetzt kann ich weiter machen. Danke
     
  7. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.