2012-04-20 34 views
6

Ich muss eine Zeichenfolge überprüfen, um festzustellen, ob sie andere Zeichen als | enthält, um die Variablen | einen Wert von NULL zuzuordnen (theoretisch möglich) eine beliebige Anzahl von | Zeichen, aber es wird wahrscheinlich nicht mehr als 5-6 sein). Wie ||||So überprüfen Sie, ob eine Zeichenfolge nur bestimmte Zeichen enthält

Ich könnte durch jedes Zeichen der Zeichenfolge oder somesuch, aber ich denke, es muss einen einfacheren Weg zu sehen.

+1

Können Sie ein Beispiel für eine Zeichenfolge angeben, die Sie manipulieren? – jprofitt

Antwort

13
if (preg_match('/[^|]/', $string)) { 
    // string contains characters other than | 
} 

oder:

if (strlen(str_replace('|', '', $string)) > 0) { 
    // string contains characters other than | 
} 
+4

oooh das erlaubt mir weiterhin regex nicht zu kennen! : p – Damon

+0

Die erste Lösung schlägt auf "\ n |" weil reguläre Regexes nicht mehrere Zeilen kreuzen – giorgiosironi

2

Ja, können Sie reguläre Ausdrücke verwenden:

if(! preg_match('/[^\|]/', $string)) { 
    $string = NULL; 
} 
0

schnellste und einfachste Weg ist möglicherweise die stripos Funktion. Es gibt die Position einer Zeichenfolge in einem anderen, oder false, wenn es nicht gefunden werden kann:

if (false === stripos($string, '|')) { 
    $string = null; 
} 

Die false === ist für strengen Typenvergleich benötigt, da stripos eine Null zurückkehren könnte darauf hinweist, dass die | ist auf dem ersten char.

Sie können eine ausgefeiltere Validierungs-Engine verwenden, die das Lesen erleichtert. Ich empfehle Respect\Validation. Beispiel:

if (v::not(v::contains('|'))->validate($string)) { 
    $string = null; 
} 
+1

* Enthält nicht * ist nicht das Gleiche wie * enthält alles außer * ... – deceze

1

Ich wollte überprüfen, ob eine Zeichenfolge nur bestimmte Zeichen enthält. Um zu verhindern, doppelte Negation (weil ich sie härter te lesen finden) Ich habe die folgende Regex entschieden:

preg_match('/^[|]+$/', $string) 

Dieser prüft eine Zeichenfolge von Anfang bis nur enthalten | Zeichen zu beenden (mindestens ein).

Verwandte Themen