Bestimmte Sonderzeichen eraubt

  • Themenstarter Themenstarter P_F
  • Beginndatum Beginndatum
Also ich weiß ja nicht, aber



echo preg_match('<[^a-zA-Z0-9'.preg_quote('-_').']>', 'foo');

und

echo preg_match('<[^a-zA-Z0-9'.preg_quote('-_').']>', 'f#oo');

liefert beide Male true;
 
echo preg_match('<[^a-zA-Z0-9'.preg_quote('*-$').']>', 'm-uh'); gibt jedoch einen Fehler aus:

Warning: preg_match() [function.preg-match]: Compilation failed: range out of order in character class at offset 15

Die Reihenfolge soll völig egal sein, da der "dumme" User sie in in Feld eingeben soll
 
Das eben soll ja egal sein, weil der admin, der das administriert das nicht weiß.

Deshalb wollte ich die Zeichen in eindeutige HEx-Werte umwandeln.

echo ereg('[^a-zA-Z0-9\x2c]', '4,4');

Das müsste doch eigentlich das Komma akzeptieren, tuts aber nicht.
 
Ok, ich denke so funktioniert es, zumindest auf den ersten Blick:

PHP:
<?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;
  }
}

$allowed = string2hex('.-_#$');

echo preg_match('/[^a-zA-Z0-9'.$allowed.']/s', 'az-_#$9"');

?>

So muss es doch auch mit allen Sonderzeichen funktionieren, die Reihenfolge dabei ist dann egal, oder irre ich mich.

Die Lösung sollte Bombensicher sein!
 
Zurück