Reguläre Ausdrücke

FP4Lisa

Mitglied
Ich habe mich nun mit regulären Ausdrücken herumgeärgert ... doch leider blicke ich da absolut net durch ... auf php.net ist das für mich absolut undurchsichtig, darum hoffe ich auf Hilfe.
Weiß jemand eine Seite oder ähnliches, die dieses Thema besser rüberbringt als php.net?

Kann mir jemand hierbei helfen? So soll es aussehen:
--> $nick mindestens 4 Zeichen, darf nur Buchstaben (egal ob klein/goß) und Zahlen enthalten (keine Sonderzeichen, keine Umlaute)
--> wenn nicht > Fehler
--> wenn ja dann Skript weiter abarbeiten

habe dazu das ausprobiert:
Code:
$nickname = $_REQUEST["name"];
 // VORPRÜFUNG DES BENUTZERNAMEN AUF ZEICHENANZAHL UND ZEICHENAUSWAHL
 $laenge = strlen($nickname);
 if ($laenge < 4)
 {
 echo "Benutzername zu kurz";
 }
 elseif(eregi("^[a-zA-Z][a-z][0-9]{3,}$",$nickname, $match))
 {
 Fehler
 }
 else ...
... aber er führt das Skript immer aus, auch wenn ich falsche Zeichen angebe ... habe also irgendwo nen Denkfehler, ich denke mal das der Reg.Ausdr. nicht true oder false ausgibt sondern irgendwie eine Ergebnismenge ... *grrrrrrr*
 
Probier mal Folgendes:
PHP:
<?php

	$pattern = '/[^A-Za-z0-9]/u';
	if( isset($_REQUEST['name']) && preg_match_all($pattern, $_REQUEST['name'], $matches) ) {
		$matches = $matches[0];
		echo sprintf(
			'<p>Ihre Eingabe <code>%s</code> besitzt %d unzulässige%s Zeichen: <code class="bad">%s</code>.</p>',
				htmlspecialchars($_REQUEST['name']),
				count($matches),
				count($matches) > 1 ? '' : 's',
				implode('</code>, <code class="bad">', array_map('htmlspecialchars', array_unique($matches)))
			);
		}
		echo '<p>Bitte korrigieren Sie Ihre Eingabe.</p>';
	}

?>
 
Ich war auch net ganz untätig

Code:
if(preg_match('/\s+[^0-9a-zA-Z](4,20)/',$nickname)) {
echo "Benutzername enthält ungültige Zeichen";
} else

... nur geht mal wieder garnix, ich möchte gern wissen wo der Fehler ist

\s um Leerzeichen, Zeilenumbrüche zu treffen
[^0-9a-zA-Z] um alles zu treffen was NICHT Zahl oder klein/groß Buchstabe ist
(4,20) um 4-20 Zeichen zu prüfen
$nickname zu Prüfender String

und das läuft denke ich so ab

Wenn ... preg_match (Stecknadeln, Heuhaufen)
... Treffer (Leerzeichen/Zeilenumbruch oder Zeichen ist weder Zahl noch Buchstabe)
...else keine Treffer (alles Zahl und Buchstabe)

Wo liegt denn mein Denkfehler?

*grummel* ... mag es ja gern verstehen und net nur die Strg-C/Strg-V - Gicht in den Fingern bekommen ;-) ...
 
Ich habe das mal eben geändert, aber er lässt immernoch auch die falschen Namen wie die neuen durch *args* ...
 
Ich poste einfach mal den gesammte Code vielleicht liegt der fehler woanders!
Code:
<?
session_start();
$nickname = $_REQUEST["name"];
// VORPRÜFUNG DES BENUTZERNAMEN AUF ZEICHENANZAHL UND ZEICHENAUSWAHL
$laenge = strlen($nickname);
if(preg_match('/^[0-9a-zA-Z]{4,20}/',$nickname)) {
echo "Benutzername enthält ungültige Zeichen ".$match;break;
} else
{
// EIGENTLICHE PRÜFUNG DES BENUTZERNAMENS IN DER DATENBANK
    		    		    		    		$connectionid  = mysql_connect ("localhost", "root", "");
    		    		    		    		if (!mysql_select_db ("LoginSystem", $connectionid))
    		    		    		    		{
    		    		    		    		  die ("Keine Verbindung zur Datenbank");
	    		    		    		    	}
	    		    		    		    		    			// Überprüfung ob Benutzername schon vergeben
	    		    		    		    		    			$nick = "SELECT "."Nickname "."FROM "."benutzerdaten "."WHERE "."Nickname like '".$_REQUEST["name"]."'";
	    		    		    		    		    			$result = mysql_query ($nick);
	    		    		    		    		    			
    		    		    		    		    		    	if (mysql_num_rows ($result) > 0)
    		    		    		    		    		    		{
    		    		    		    		    		    		include (header ("Location: /fp4lisahp/home.php?inhalt=errorname"));
    		    		    		    		    		    		}
    		    		    		    		    		    	else
	    		    		    		    		    			{
    		    		    		    		    		    		$_SESSION["neuernick"] = $nickname;
		    		    		    		    		    			include (header ("Location: /fp4lisahp/home.php?inhalt=regpwd"));
    		    		    		    		    		    	}
}
	    		    		    		    	?>
 
Code:
preg_match('/^[0-9a-zA-Z]{4,20}/',$nickname))
..prüft, ob $nickname mit 4 Zeichen beginnt(die 20 ist dabei überflüssig, da nicht die gesamte Zeichenkette, sondern nur deren Anfang geprüft wird), welche Nuchstabe oder Ziffer sind.... und gibt dann "Fehler" aus , wenn dies der Fall ist.

Vielleicht liest du dieses Thema besser nochmal komplett durch :confused:
 
Zurück