Hallo zusammen
Ich habe ein Problem, das für mich mehr mathematisch als programmiertechnisch unlösbar ist:
Es handelt sich um einen Online-Vokabeltrainer: Es wird das deutsche Wort gezeigt, man muss das Fremdwort eintippen und danach wird überprüft, ob es stimmt.
Man kann jetzt bei der Abfrage noch Optionen wählen:
Inhalte in Klammern ignorieren (IGNORE_BRACKETS)
Die Reihenfolge der Wortbedeutungen ignorieren (IGNORE_ORDER)
Es muss nur eine Wortbedeutung angegeben werden (ONE_ANSWER)
Gross-/Kleinschreibung ignorieren (IGNORE_CAPITAL)
Leerzeichen ignorieren (IGNORE_WHITESPACES)
Sonderzeichen ignorieren (IGNORE_SYMBOLS)
Ich habe nun eine Funktion compare(answer, input), die true zurückgeben soll, wenn das Wort unter Berücksichtigung der Optionen (siehe oben) stimmt.
Bis jetzt habe ich erst die Gross-/Kleinschreibung und die Leerzeichen hingebracht:
function compare(answer, input) {
if(IGNORE_WHITESPACES) {
answer = answer.replace(/\W/g, "");
input = input.replace(/\W/g, "");
}
if(IGNORE_CAPITAL) {
answer = answer.toLowerCase();
input = input.toLowerCase();
}
if(answer == input) {
return true;
} else {
return false;
}
}
Jetzt sollte aber z.B. bei IGNORE_BRACKETS die Klammern ignoriert, werden. Wenn aber trotzdem einen Inhalt in der Klammer angegeben wird, sollte dieser überprüft werden und trotzdem (obwohl eigentlich Inhalte in Klammern ignoriert werden) false zurückgeben.
Also:
richtige Lösung: ab(cd)ef(gh)ij
eingegebene Lösung: abef(ww)ij
=> false
Wenn "(ww)" nicht stehen würde, wäre es richtig!
Die Wortbedeutungen werden dann bei [.,/-] unterteilt. Diese Wortbedeutungen sollten aber nicht "klammerübergreifend" gesplittet werden.
Ich hoffe, dass jemand dieses ziemlich komplizierte Problem (oder wenigstens einen Teil davon) versteht.
Danke und Gruss