Eingabetext auf mehrere Wörter überprüfen

Flash-Commander

Grünschnabel
Hallo zusammen,

ich stehe gerade vor einem Problem und weiß langsam nicht mehr weiter.
Es geht darum, das ich ein Eingabetextfeld auf mehrere eingegeben Wörter überprüfen möchte, sprich : Wenn der User alles eingetragen hat, was verlangt wurde (mehrere Wörter) dann gib positives Feedback im dynamischen Textfeld...Wenn er nicht alles eingetragen hat negatives...

Die Ausgabe ist das kleinere Problem. Nur weiß ich absolut nicht, wie man mehrere Wörter in einem Eingabetextfeld überprüft.

Hoffe ihr könnt mir weiterhelfen

Gruß
Maddin
 
Hi,

Code:
function checkForWords(str, amt) {
    return (str.split(" ").length >= amt);
}

trace(checkForWords("Hallo Welt", 2)); // gibt "true" aus

trace(checkForWords("Hallo Welt", 3)); // gibt "false" aus, da der Satz nur 2 Worte hat

Gruß
.
 
Hallo Tobias,

erstmal danke für deine Hilfe, aber das ist leider nicht das was ich brauche, denn es sollen bestimmte Begriffe in dieses Eingabefeld eingegeben werden, die natürlich auch in unterschiedlicher Reihenfolge eingetippt werden könnten.
Also ich muss nicht einen kompletten Satz "vergleichen" sondern jedes einzelne geschriebene Wort

z.B. : Was braucht man alles für eine Bewerbungsmappe?
Antworten wären: Zeugnisse, Anschreiben, Lebenslauf, Anlagen

Diese Worte sollten für ein positives Feedback natürlich alle eingetragen werden...nur wie überprüfe ich nun das in dem Eingabetextfeld all diese Worte geschrieben wurden bzw. nicht geschrieben oder vergessen wurden ?
Hoffe das Beispiel hilft bei der Verdeutlichung meines Problems.

Ganz schön kompliziert die Sache....jedenfalls für mich :(

Gruß
Maddin
 
Hi,

sorry - das ging aus Deiner ersten Fragestellung nicht hervor.
Code:
function checkWords(str, words) {
    str = str.split(",").join(" "); // Satzzeichen entfernen
    str = str.split(".").join(" ");
    str = str.split('"').join(" ");
    str = str.split(" ");
    for (var i in str) {
        for (var h=0; h<words.length; h++) {
            if (str[i].toLowerCase() == words[h].toLowerCase()) {
                words.splice(h, 1);
                break;
            }
        }
    }
    return (words.length == 0);
}

var d = checkWords("Hallo, du böse Welt", new Array("Hallo", "welt"));

trace(d); // Ausgabe: "true"

Wie Du siehst, übergibst Du der Funktion den String und ein Array aus notwendigen Worten.

Gruß
 
Guten morgen!

vielen Dank Tobias für deine Mühen. Das Script von dir scheint genau das zu sein, was ich gesucht habe, jedoch müssten wir noch was dran pfeilen. :)

Ich bin in AS noch nicht so bewandert wie du und weiß daher nicht, was so manche AS Codezeilen von dir bewirken. Ich kommentier dein Script mal....wär super wenn einer dies auf Richtigkeit überprüfen könnte...denn letztendlich will ich ja auch was lernen dabei und den von dir geschriebenen Code verstehen ;)

PHP:
function checkWords(str, words) {
//Definieren einer Funktion names checkWords, welche aus strings und einzelnen  wörtern bestehen kann

    str = str.split(",").join(" ");
    str = str.split(".").join(" ");
    str = str.split('"').join(" ");
    str = str.split(" ");
// Hier werden alle Satzzeichen entfernt, die bei der Eingabe gemacht wurden um lediglich die Strings herauszufiltern

    for (var i in str) {
//verstehe ich nicht ganz...schleifenaufruf mit der variablendeklaration "i" 

        for (var h=0; h<words.length; h++) {
//Schleife, die die einzelnen Zeichen durchläuft."wenn h< als Wortlänge erhöhe h um 1"
            
        if (str[i].toLowerCase() == words[h].toLowerCase()) {
//hier werden alle großbuchstaben in kleinbuchstaben umgewandelt, sowohl in den strings als auch den einzelnen Wörtern (?)

                words.splice(h, 1);
//hab ich noch nie gesehn..flash hilfe sagt:Fügt einem Array Elemente hinzu bzw. entfernt diese. Bei dieser Methode werden Änderungen am Array vorgenommen, ohne eine Kopie zu erstellen...bitte um genauere erklärung ^^
                
               break;
//gibt Flash an den restlichen Teil der Schleife zu überspringen
            }
        }
    }
    return (words.length == 0);
//Gibt den von einer Funktion zurückgegebenen Wert an...sagt die Flash Hilfe..aber warum wird die "wortlänge = 0 gesetzt" ?
}

var d = checkWords("Hallo, du böse Welt", new Array("Hallo", "welt"));
// Variablendeklaration(d) die die funktion "checkWords" durchläuft, welche aus dem string"Hallo, du böse Welt" und den einzelnen Wörtern "Hallo" und "welt" besteht (?)

trace(d); // Ausgabe: "true"
//Ausgabe der Variable d

Ok soviel zu deinem geschriebenen Code...so ganz habe ich ihn noch nicht verstanden...denke ich :)

Nun aber weiter, denn, wenn ich nun deinen Code verwende und die benötigten Wörter bei "var d = checkWords("Anschreiben, Lebenslauf, Zeugnisse", newArray("Anschreiben", "Lebenslauf", "Zeugnisse")); reinschreibe...liefert er mir natürlich den Wert "true" im Ausgabefenster. Soweit so gut....
...aber nun müsste ich diesen Schleifendurchlauf noch mit dem Eingabetextfeld verbinden. Sprich eine stetige Abfrage der eingetragenen Wörter auf Richtigkeit. Wenn dann all diese Wörter eingetragen wurden, soll im feedback (dynamisches Textfeld) eine entsprechende Nachricht generiert werden.
Ich habe mal die "trace(d)" zeile auskommentiert und folgendes drangehängt:

PHP:
if (d= true) {
	feedback.text = "Alles richtig!"
}
else
{
	feedback.text = "Falsch!"
}

Nun gibt er mir natürlich, dadurch das ich diese Abfrage nicht mit dem Eingabetextfeld verbunden habe direkt ein "Alles richtig" im Feedback textfeld zurück.
Daher die Frage, wie ich diese ganze Schleife mit dem Eingabetextfeld verbinden kann?

Schönen gruß
Maddin
 
Hi,

ich kommentiere meinen Code einmal selbst:
Code:
function checkWords(str, words) {
    str = str.split(",").join(" "); // Da ich den String an seinen Leerzeichen trenne,
    str = str.split(".").join(" "); // entferne ich vorher einige Satzzeichen, da der Satz "Hallo, Welt"
    str = str.split('"').join(" "); // ansonsten die Wörter "Hallo," und "Welt" ergeben würde
    str = str.split(" "); // Hier trenne ich an den Leerzeichen, so dass ein Array mit Worten entsteht
    for (var i in str) { // mit einer for..in-Schleife werden alle Elemente des Arrays durchlaufen, ohne
    // dass ich manuell inkrementieren müsste.
        for (var h=0; h<words.length; h++) { // Pro Wort des Satzes durchlaufe ich alle Wörter
        // im words-Array. Hier brauche ich den numerischen Index, daher die
        // "herkömmliche" for-Schleife.
            if (str[i].toLowerCase() == words[h].toLowerCase()) { // Wenn mein aktuelles Wort mit
            // einem der Wörter im words-Array übereinstimmt ...
                words.splice(h, 1); // .. entferne ich dieses Wort aus dem words-Array!
                break;
            }
        }
    }
    return (words.length == 0); // Die Länge ist dann null, wenn alle Wörter gefunden wurden.
}

Gehen wir einmal davon aus, Du hast ein Eingabefeld (Instanzname "eingabe") und einen Button, der beim Klick die eingegeben Wörter überprüfen soll. Dann könnte Dein Code so aussehen:
Code:
var neededWords = new Array("Lebenslauf", "Referenzen", "Ausbildung");

meinButton.onRelease = function() {
    var isOk = checkWords(eingabe.text, neededWords);
    if (isOk) {
        feedback.text = "Alles OK";
    } else {
        feedback.text = "Da fehlt was!";
    }
}

Gruß
.
 
WoW That's it

Vielen Dank Tobias, jetzt läuft alles einwandfrei und gelernt habe ich zudem auch noch was!:)

Rein interesse halber hät ich aber trotzdem noch eine Frage :rolleyes:
...denn mir ist aufgefallen, dass wenn ich nun alle benötigten Begriffe eintrage und die positive Feedback meldung kommt, ich darauf hin mittels button die Felder leere (" ") und dann nicht alle Begriffe eintrage, trotzdem die positive Meldung kommt, da ja die Funktion schon einmal erfüllt wurde. Wie könnte ich denn diese Funktion quasi resetten ?

Das würde mich noch interessieren, auch wenn ich das zur jetzigen Zeit nicht benötige.

Auf jedenfall nochmal vielen Dank für deine tolle und vor allem schnelle Hilfe!

Gruß
Maddin
 
Hi,

Sorry, mein Fehler: Das Array wird als Referenz übergeben und ist nach dem Funktionsaufruf leer. Übergib lieber ein statisches Array:
Code:
var isOk = checkWords(eingabe.text, new Array("Lebenslauf", "Referenzen", "Ausbildung"));

Gruß
.
 
Zurück