Bestimmte Sonderzeichen eraubt

  • Themenstarter Themenstarter P_F
  • Beginndatum Beginndatum
P

P_F

Hi, ich möchte bei der Stringvalidierung bestimmte Sonderzeichen zulassen. Das ganze soll mit einem regulären Ausdruck validiert werden.

Beispielsweise sollen diese Zeichen akzeptiert werden.
$allowedChars = '.-#_*';

Ich habe so angefangen, diese Zeichen erstmal in hexcode umzuwandeln, damit die Zeichen eindeutig als diese erkannt werden und nicht z.B. als Metazeichen oder sowas interpretiert werden:
PHP:
<?
function string2hex($str)
{
  if (trim($str)!="")
  {
    $hex="";
    $length=strlen($str);
    for ($i=0; $i<$length; $i++)
    {
      $hex.='\\x'.str_pad(dechex(ord($str[$i])), 2, 0, STR_PAD_LEFT) ;
    }
    return $hex;
  }
}
?>

So klappt das nur leider nicht, ich kenne mich mit Regex nicht so gut aus.

PHP:
<?
preg_match('[a-zA-Z0-9'.string2hex($allowedChars).']', $str); 
?>

Bitte helft mir :-)
 
Probier mal Folgendes:
PHP:
preg_match('<[a-zA-Z0-9'.preg_quote($allowedChars).']>', $str);
 
Es wird ja auch nur geprüft, ob ein Zeichen mit denen in der Zeichenklasse beschriebenen Zeichen übereinstimmt. Kehre die Zeichenklasse einfach um, sodass geprüft wird, ob ein unerlaubtes Zeichen in der Zeichenkette vorkommt.
 
Funktioniert leider auch nicht, hat irgendwie in meinen Augen auch keinen Sinn, das hat Gumbo bestimmt anders gemeint, oder?
 
Du wolltest wissen, wie man eine Zeichenkette umkehrt - das macht strrev. Wenn du das nicht gemeint hast, sei doch so gut un präzisiere deine Frage etwas.
 
Moritz, lies doch einfach das Topic. Gumbo hat mir geraten die Zeichenkette umzukehren, aber aus dem Zusammenhang heraus wird eigendlch deutlich, dass er es nicht so gemeint haben kann, dass man die Schreibweise umkehrt, da das dann ja der gleiche String bleibt.
Also habe ich gefragt wie er das meint
 
Eine Zeichenklasse wird mit dem Zirkumflex-Zeichen (^, U+005E) am Anfang der Zeichenklasse umgekehrt. Damit passen darauf alle bis auf die in der Zeichenklasse beschriebenen Zeichen.
PHP:
preg_match('<[^a-zA-Z0-9'.preg_quote($allowedChars).']>', $str);
 
Zurück