Hi, irgendwie weiß ich nicht weiter. Ich bin noch blutiger Anfänger und bekomm da mit meiner denkweise nicht weiter.
Mein Problem: ich möchte verhindern, dass jemand mit copy&pase den chat zumüllt. Soweit so gut. Es funktioniert bei einer Zeichenkette wie z.B. "abbcabbc".
Bei einer Zeichenkette wie "asdawewgawfegaefqawfsefafafasdawewgawfegaefqawfsefafaf" funktioniert die Funktion leider nicht. Es liegt Wahrscheinlich daran, dass "asd" und "awe", also die ersten 6 Zeichen nicht das selbe sind. Deshalb möchte ich die Schleife weiterlaufen lassen. Also, wenn asd und asw nicht das gleiche ist soll er weitere Zeichen an die Zeichenkette hängen.
Als nächstes sollte er also prüfen ob "asda" und "wewg"das gleiche sind dann "asdawewg" und "awfegaef" und danach ob "asdawewgawfega" und "efqawfsefafafa" und dann "asdawewgawfegaefq" und "awfsefafafasdawew", dann "asdawewgawfegaefqawfsef" und "afafasdawewgawfegaefqa", dann "asdawewgawfegaefqawfsefaf" und "afasdawewgawfegaefqawfsef".
Als letztes "asdawewgawfegaefqawfsefafaf" und "asdawewgawfegaefqawfsefafaf". Das trifft jetzt zu und es ist kopiert und eingefügt worden. Jertzt soll die fehlermeldung kommen. Tut sie aber nicht.
Die Fehlermeldung kommt immer nur, wenn die Zeichenkette an dem das 1. Zeichen an 1. Stelle bis zum nächsten gleichen Zeichen und die Zeichen danach bis der String so groß ist wie die 1. Zeichenkette die selben sind. Also 1nen von x durchläufen einer Schleife die aber weiterlaufen sollte.
Ich hoffe ich hab das Problem deutlich genug erklärt und ihr könnt mir helfen =)
Das ist der betroffene Code:
Hier nochmal die gesamte Funktion mit allen Möglichkeiten die nach und nach abgearbeitet werden.
Und zum test: http://markus-r.pytalhost.de/eigene-projekte.php
einfach auf den Punkt Chat drücken
Danke schonmal für jede Antwort.
mfg Markus
Mein Problem: ich möchte verhindern, dass jemand mit copy&pase den chat zumüllt. Soweit so gut. Es funktioniert bei einer Zeichenkette wie z.B. "abbcabbc".
Bei einer Zeichenkette wie "asdawewgawfegaefqawfsefafafasdawewgawfegaefqawfsefafaf" funktioniert die Funktion leider nicht. Es liegt Wahrscheinlich daran, dass "asd" und "awe", also die ersten 6 Zeichen nicht das selbe sind. Deshalb möchte ich die Schleife weiterlaufen lassen. Also, wenn asd und asw nicht das gleiche ist soll er weitere Zeichen an die Zeichenkette hängen.
Als nächstes sollte er also prüfen ob "asda" und "wewg"das gleiche sind dann "asdawewg" und "awfegaef" und danach ob "asdawewgawfega" und "efqawfsefafafa" und dann "asdawewgawfegaefq" und "awfsefafafasdawew", dann "asdawewgawfegaefqawfsef" und "afafasdawewgawfegaefqa", dann "asdawewgawfegaefqawfsefaf" und "afasdawewgawfegaefqawfsef".
Als letztes "asdawewgawfegaefqawfsefafaf" und "asdawewgawfegaefqawfsefafaf". Das trifft jetzt zu und es ist kopiert und eingefügt worden. Jertzt soll die fehlermeldung kommen. Tut sie aber nicht.
Die Fehlermeldung kommt immer nur, wenn die Zeichenkette an dem das 1. Zeichen an 1. Stelle bis zum nächsten gleichen Zeichen und die Zeichen danach bis der String so groß ist wie die 1. Zeichenkette die selben sind. Also 1nen von x durchläufen einer Schleife die aber weiterlaufen sollte.
Ich hoffe ich hab das Problem deutlich genug erklärt und ihr könnt mir helfen =)
Das ist der betroffene Code:
Code:
var dopplungsworte = "mama papa popo pipi kaka koko lili lala lolo bambam bummbumm sumsum dummdumm".split(" "); // array mit Worten die aus sich doppelten Zeichen bestehen
var stringcheck = ""; //strings initialisieren
var stringcheck1 = ""; //" .... "
var stringcheck2 = ""; //" .... "
var dopplungscheck = false; //" .... "
for(var i3 = 0; i3 < dopplungsworte.length; i3++){ // prüft ob ein string aus dopplungen vorliegt z.b. papa oder mama
if(f.neuer_eintrag.value == dopplungsworte[i3]){
dopplungscheck = true;
}
}
if(dopplungscheck != true){
for(i = 0; i < f.neuer_eintrag.value.length; i++){ //"abbcabbc" <- der zu prüfende string
stringcheck += f.neuer_eintrag.value[i]; //"abbca"<-i=4 bbca <- prüfer wird gefüllt bis 1 buchstabe der selbe ist, wie das aus der 1. stelle des prüfers
if(f.neuer_eintrag.value[i] == stringcheck[0] && i != 0){ //bei "abbca" trifft die bedingung zu und i ist auf dem wert 4
stringcheck1 = stringcheck.substr(0, stringcheck.length-1); //"abbc" <- abbca wird auf abbc gekürzt
for(var i2 = 0; i2 <= i; i2++){ //es wird mit neuem iterator der weitere string abgegangen
stringcheck2 += f.neuer_eintrag.value[i+i2]; //fängt bei der stelle an bei der i aufgehört hat ->"abbc"
if(stringcheck1 == stringcheck2){ //wenn beide strings gleich sind wird eine fehlermeldung übermittelt
stringcheck2 = ""; // prüfer 2 wird zurückgesetzt
copypasefehler = "- Sie d%FCrfen nicht mehrmals die gleiche Zeichenkette eingeben.\n - - - - - - - - - - - - - - - - - - copy&pase Schutz - - - - - - - - - - - - - - - - - -\n";
}
}
}
}
}
Hier nochmal die gesamte Funktion mit allen Möglichkeiten die nach und nach abgearbeitet werden.
Code:
function submitpruefer(){
var f = document.texteingabe;
var fehler = "";
var leerzeichenfehler = "";
var gleichezeichenfehler = "";
var copypasefehler = "";
if (f.neuer_eintrag.value == ""){
fehler+= "- Darf nicht leer sein!\n";
}
if (f.neuer_eintrag.value[0] == " "){
fehler+= "- Das erste Zeichen Darf kein Leerzeichen sein\n";
}
for(var i = 0; i < f.neuer_eintrag.value.length; i++){
if (f.neuer_eintrag.value[i] == " " && f.neuer_eintrag.value[i+1] == " " ){
leerzeichenfehler = "- Es d%FCrfen keine 2 Leerzeichen hintereinander stehen\n";
}
}
for(i = 0; i < f.neuer_eintrag.value.length; i++){
if (f.neuer_eintrag.value[i] == f.neuer_eintrag.value[i+1] && f.neuer_eintrag.value[i] == f.neuer_eintrag.value[i+2] && f.neuer_eintrag.value[i] == f.neuer_eintrag.value[i+3]){
gleichezeichenfehler = "- Es d%FCrfen nicht 4 mal die selben Zeichen hintereinander stehen\n";
}
}
var dopplungsworte = "mama papa popo pipi kaka koko lili lala lolo bambam bummbumm sumsum dummdumm".split(" "); // array mit Worten die aus sich doppelten Zeichen bestehen
var stringcheck = ""; //strings initialisieren
var stringcheck1 = ""; //" .... "
var stringcheck2 = ""; //" .... "
var dopplungscheck = false; //" .... "
for(var i3 = 0; i3 < dopplungsworte.length; i3++){ // prüft ob ein string aus dopplungen vorliegt z.b. papa oder mama
if(f.neuer_eintrag.value == dopplungsworte[i3]){
dopplungscheck = true;
}
}
if(dopplungscheck != true){
for(i = 0; i < f.neuer_eintrag.value.length; i++){ //"abbcabbc" <- der zu prüfende string
stringcheck += f.neuer_eintrag.value[i]; //"abbca"<-i=4 bbca <- prüfer wird gefüllt bis 1 buchstabe der selbe ist, wie das aus der 1. stelle des prüfers
if(f.neuer_eintrag.value[i] == stringcheck[0] && i != 0){ //bei "abbca" trifft die bedingung zu und i ist auf dem wert 4
stringcheck1 = stringcheck.substr(0, stringcheck.length-1); //"abbc" <- abbca wird auf abbc gekürzt
for(var i2 = 0; i2 <= i; i2++){ //es wird mit neuem iterator der weitere string abgegangen
stringcheck2 += f.neuer_eintrag.value[i+i2]; //fängt bei der stelle an bei der i aufgehört hat ->"abbc"
if(stringcheck1 == stringcheck2){ //wenn beide strings gleich sind wird eine fehlermeldung übermittelt
stringcheck2 = ""; // prüfer 2 wird zurückgesetzt
copypasefehler = "- Sie d%FCrfen nicht mehrmals die gleiche Zeichenkette eingeben.\n - - - - - - - - - - - - - - - - - - copy&pase Schutz - - - - - - - - - - - - - - - - - -\n";
}
}
}
}
}
if (f.neuer_eintrag.value.length > 200){
fehler += "- Bitte geben sie nicht mehr als 200 Zeichen ein!";
}
if (fehler != "" || leerzeichenfehler != "" || gleichezeichenfehler != "" || copypasefehler != ""){
var fehlertext = "Ein Fehler ist aufgetreten:\n\n";
if(fehler != ""){
fehlertext += fehler;
}
if(leerzeichenfehler != ""){
fehlertext+= leerzeichenfehler;
}
if(gleichezeichenfehler != ""){
fehlertext+= gleichezeichenfehler;
}
if(copypasefehler != ""){
fehlertext += copypasefehler;
}
alert (unescape(fehlertext));
return false;
}
return true;
}
Und zum test: http://markus-r.pytalhost.de/eigene-projekte.php
einfach auf den Punkt Chat drücken
Danke schonmal für jede Antwort.
mfg Markus