eregi() - will nicht so wie ich will

Watusimann

Erfahrenes Mitglied
Hallo,

Habe wieder mal ein wahrscheinlich recht simples Problem:
PHP:
if (trim(strlen($_POST[namen])) < 3 || eregi('[[:punct:]]', $_POST[namen])) {
     $fehler .= '&raquo; Der Name ist fehlerhaft.<br/>';}
In der oben angeführten Anweisung wirft er einen Fehler aus, sobald er ein Satzzeichen in Formularfeld entdeckt, jedoch möcht ich schon ".", "_" und "-" zulassen. Ich verzweifel gerade und hoffe auf Eure Hilfe.
 
Probier mal Folgendes:
PHP:
$chars = '!#%&()*+,-./:;<=>?@[/]^_{|}~';
if( strlen(trim($_POST['name'])) || preg_match('/[^'.preg_quote($chars).']/', $_POST['name']) ) {
	…
}
 
Das funktioniert leider nicht. Selbst wenn ich die regulären Ausdrücke ändere, sowie es bei php.net vorgegeben ist.
PHP:
$chars = '.\+*?[^]$(){}=!<>|:';
Verwende ich deine angegebe $chars, bekomme ich die Fehlermeldung:
preg_match() [function.preg-match]: Unknown modifier '\'

PS: auch wenn ich "/" weglasse :(
 
Zuletzt bearbeitet:
Ich habe das mal so geschrieben:
PHP:
$ersetzen = array('<', '>', '!', '?', '"', '\'', '(', ')', '#', '%', '[', ']', '=', ':', '/', '|', '{', '}', '$', ';', ',', '+', '*', '~', '&', '§'); 	 
	 $name = str_replace($ersetzen, '', $_POST['namen']); 
	  
     if (trim(strlen($name)) < 3)  {
     $fehler .= '&raquo; Der Name ist zu kurz.<br/>';}

der Vorteil: er bezieht auch den Backslash mit ein, was mir immer wieder als Fehler bei der preg_match - Funktion deklariert wird. Danke Dir für deine Hilfe
 
Oder die Zeichen die erlaubt sind als pattern.

PHP:
$name = trim($_POST['name']);
$regex = '!^[\w]*([-_.\s])?[\w]*$!';
if (strlen($name) < 3 and preg_match($regex,$name))
{
  echo "Ok";
}
else echo "Not ok";

mfg
 
Zurück