PHP und Sonderzeichenerkennung

eXecuTe

Registered User
Hallo!

Ich wäre nett wenn mir jemand eine funktion geben könnte, welche checkt ob in einer variablen ein sonderzeichen drin steckt. Dies soll den Zweck haben, dass User keine Sonderzeichen in ihre namen bringen, damit man den nick in der browserleiste eingeben kann.

Habs mal folgends versucht:
if (eregi ("([^A-Z])-([^a-z])-([^0-9])", $_POST[nick]))
{
echo "Der Benutzername darf keine Sonderzeichen enthalten!";
}

klappt aber nicht -.-

Kann mir jemand helfen??

THX,
eXecuTe
 
PHP:
if (preg_match("/[A-Za-z0-9]/", $nick)) {
    echo "roger!";
}
else {
    echo "nix Sonderzeichen du!";
}
 
Das geht auch nicht :confused:
Der sagt mir auch bei sonderzeichen dass alles in ordnung ist...

Guckt mal hier: http://www.bunnyklau.de/?anmelden

Da kann man sich nur anmelden, wenn der Name keine Sonderzeichen enthält. So möchte ich das auch haben. Auch mit Formular.
Manno warum geht das denn nicht? ^^

Greetz,
eXecuTe
 
Der Code funktioniert auf jeden Fall schon mal.

Wie hast du das denn eingebaut bei dir?
 
PHP:
#...blablabla
$nick = $_POST[nick];
if (!preg_match("/[A-Za-z0-9]/", $_POST[nick]))
	{
		echo "Der Benutzername darf keine Sonderzeichen enthalten!";
		$zaehler = true;
	}
if (!$_POST[email])
	{
		if ($zaehler == true) echo "<br>";
		echo "Bitte gebe deine eMail-Adresse ein!";
		$zaehler = true;
	}
if ($zaehler == true)
{ formular(); die;}
#blablabla...
 
Last edited by a moderator:
Wenn du mit " die;" die -Abbruchfunktion- meinst, musst du "die();" schreiben.
Ansonsten ist das ohne Funktion.

[edit] Und du musst ihrgendwie noch festhalten, dass der Name ein Sonderzeichen enthielt. Bisher wird nur eine Textausgabe gemacht, aber das war's dann auch schon.
 
Das wird festgehalten, indem die variable $zaehler auf true gesetzt wird. Somit weiß der unten, dass der die daten nicht (imm späteren code) an die sql tabelle schicken soll, sondern dass er abbrechen soll (die();) und das formular erneut öffnen soll (formular();)
Oder meinst du das anders?


Das die; hat sonst auch ohne () funktioniert....
 
eXecuTe said:
if (!preg_match("/[A-Za-z0-9]/", $_POST[nick]))
Die Zeile untersucht lediglich, ob einziges Zeichen/Ziffer im Nick vorkommt.
Korrekt wären:
a) /^[A-Za-z0-9]+$/
Untersucht den ganzen String
b) /[^A-Za-z0-9]/
Untersucht, ob ein Sonderzeichen (^ == negation der Menge) enthalten ist.

huschi.
 
Last edited by a moderator:
So noch ein kleiner Zusatz: Zu a-z und 0-9 soll auch das @ zeichen zugelassen sein.. wie kann man dann noch einzelne zeichen hinzufügen?

Greetz,
eXe
 
komisch.. so geht des auch nicht..

PHP:
if ($_POST[email])
{
	if (!preg_match("/^[A-Za-z0-9@]+$/", $_POST[email]))
		{
			if ($zaehler == true) echo "<br>";
			echo "Bitte gebe eine gültige eMail-Adresse ein!";
			$zaehler = true;
		}
}

Der lässt das @ immer durch .. muss da nich noch irgend ein platzhalter hin?
 
Versuch mal das @ zu escapen, eifnach aus dem @ nen \@ machen. Und für eMail Adressen gibt es einiges an fertigern Pattern, da wenn du wirklich eine valide Adresse haben willst einiges beachten musst.

Upsa Huschi, jo hast Recht gehabt, Nicks sind ja länger als ein Zeichen ;) Ich sollte mehr überlegen udn etn wild drauf los posten *g*


Regards,
Thilo
 
Wenn man das mit dem Mailadresse pruefen auf die Spitze treiben will, kann man vorab eine Anfrage an die Adresse schicken und die Antwort des Mailservers auswerten.
Oder aber man schickt einen Aktivierungslink an die angegebene Mailadresse. Auf diese Weise bringt es nichts, wenn man eine falsche Adresse eingibt.

Hier noch ein bischen Hilfe, um Mailadressen mit den RegEx zu pruefen:
http://www.kurtderopa.de/knowhow/6/
 
Ich finde eh
Code:
/^[-_.[:alnum:]]+@((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5]
[0-5]))$/i
als Mail Regexp am besten. Aber normal dürfte es auch ein folgendes Pattern tun:
Code:
^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$


Gruß
 
Back
Top