RegEx: Besteht String nur aus dem gleichen Zeichen?

SYS83

Mitglied
Hallöchen,

Ich will per RegEx checken, ob ein String nur aus einem Zeichen besteht, dass sich x-mal wiederholt. Ist das der Fall, soll false zurückgegeben werden.

Der erste Versuch funktioniert schon mal, nur kriege ich Compilation-Errors um die Ohren geknallt wenn es sich um Zeichen wie * oder [ handelt (reservierte Zeichen von Regex).

Mein Codeschnipsel sieht im Moment so aus:
PHP:
function CheckString(&$String)
{
...
   if(preg_match($String{0}."{".strlen($String)."}",$String)>0)
   {
      $ok = false;
   }
   else
   {
     $ok = true;
   }
...
  return $ok;
}


Wie krieg ich das jetzt am besten gelöst, dass auch die reservierten Zeichen vor der Wiederholungsregel als normale Zeichen betrachtet werden? Ich weiss zwar dass ich das Zeichen per Backslash "\" escapen kann, dann passt aber das Pattern wieder nicht für die stinknormalen Zeichen.

Im Voraus Danke für Eure Hilfe.
 
1. Dir fehlen die Delimiter
2. Die expression kannst du auch einfacher haben
3. nicht vergessen bei preg_quote den Delimiter mit anzugeben

Mein Vorschlag:
PHP:
preg_match("/^".preg_quote($String{0},"/")."+$/",$String)
 
Hallo,

hierfür gibt es die Funktion preg_quote($string), welche die Sonderzeichen escaped.

Gruß
BK

Danke für den Tipp, aber jetzt scheints immer true zu liefern, egal welches Zeichen ich teste.
Hier mein neuer Code:
PHP:
function CheckString(&$String) 
{ 
... 
  $String = trim($String);
  $Zeichen = $String{0};
  $pattern = preg_quote($Zeichen)."{".strlen($String)."}";
  if(preg_match($pattern,$String)>0)
  {
    $ok = false;
  }
  else
  {
    $ok = true;
  }
...
  return $ok;
}



PHP spuckt hier ein Warning aus, aber ich glaube, das kann ich im Moment ignorieren:
Warning: preg_match() [function.preg-match]: Delimiter must not be alphanumeric or backslash in *ZENSIERT*

Wo ist hier mein Fehler?

Edit:

Da hat ja wer geantwortet, während ich nachgehakt hab.

Danke, rd4eva. Genau das hat mein Problem gelöst.
 
Zuletzt bearbeitet:
Hallo,

wie rd4eva schon angemerkt hat, brauchst du noch einen Delimiter für den RegEx.
PHP:
$pattern = "/" . preg_quote($Zeichen)."{".strlen($String)."}/";
  if(preg_match($pattern,$String)>0)

Gruß
BK
 
Zurück