• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] Ist mein Code so richtig?

dertypdernixkan

New member
Hallo,

ich würde gerne wissen, ob mein JavaScript-Code so okay ist oder ob er noch vereinfacht oder verbessert werden muss.

Der Code sucht in einem String der folgenderweise aufgebaut ist:

Befehl "/warn"
Empfänger "username"
Text "text"

Das ganze wird Serverseitig durch JavaScript überprüft, sowohl auch ob der User die Rechte hat oder nicht.

Hier mal der Code:

Code:
function warn(a, b) {


	var reg = /\/warn [a-z0-9_-_.]+[a-z0-9_-_.?!,\s]+$/gi;


	if (reg.test(a)) {


		return {


			"iswarn": true,


			"from":b,


			"to": a.replace(/\/warn [a-z0-9_-_.]+[a-z0-9_-_.?!,\s]+$/gi, function n(t){


				return a.substr(t.indexOf(" ") + 1).substr(0,a.substr(t.indexOf(" ") + 1).indexOf(' '));


			}),


			"reason": a.replace(/\/warn [a-z0-9_-_.]+[a-z0-9_-_.?!,\s]+$/gi, function m(u){


				return a.substr(u.indexOf(" ") + 1).substr(a.substr(u.indexOf(" ") + 1).indexOf(" ") + 1);


			})


		}


	} else {


		return {"iswarn": false}


	}


}


var str = "/warn testuse lass das bitte, sonst sperre ich dich aus! willst du das?";
var bak = warn(str, "eisfeld");


console.log(bak);

Ausgabe der Console:

Code:
Object {iswarn: true, from: "eisfeld", to: "testuser", reason: "lass das bitte, sonst sperre ich dich aus! willst du das?"}

Der Code macht was er soll, da ich aber nicht so fit in JS bin wollte ich euch eben bitten/fragen ob etwas verbessert, geändert oder gar gekürzt werden kann oder ob der Code einfach nur unsinn ist?
 
Der Code ist nicht optimal und an mindestens einer stelle falsch, denn das _-_ in der RegExp ergibt keinen Sinn.

Auch kann die RegExp allgemein wahrscheinlich vereinfacht werden. Ich würde jetzt mal /^\s*\/warn\s+(\S+)(.+)$/i vorschlagen. Durch die Matches musst du die RegExp auch nur einmal ausführen und kannst auf die replace verzichten:
Code:
function warn(str, from) {
	var match = str.match(/^\s*\/warn\s+(\S+)(.+)$/i);
	
	if (match){
		return {
			iswarn: true,
			from: from,
			to: match[1],
			reason: match[2].trim()
		}
	}
	else {
		return {
			iswarn: false
		}
	}
}

var str = "/warn testuse lass das bitte, sonst sperre ich dich aus! willst du das?";
var bak = warn(str, "eisfeld");
console.log(bak);
- wobei hierbei jetzt noch annahmen über den Benutzernamen gemacht werden, die nicht wahr sein müssen...
 
Hallo

Danke für das feedback!

Deine Variante sieht einfacher aus, werde sie mal testen.

Zum username habe ich eine kleine Funktion die prüft ob der user im chat ist oder nicht
 
Meine Anmerkung zum Benutzernamen hat jetzt nichts damit zu tun, ob dieser existiert oder ncht, sondern dass die RegExp annimmt, dass der Benutzername durch \S+ beschrieben werden kann. Das könnte ev. zu allgemein sein.
 
Zurück
Oben