2016-07-11 2 views
1

Wie kann ich mit php mit preg_match() überprüfen, wenn Zeichenfolge eine bestimmte Struktur hat. Zum Beispiel String ist:preg_match, um zu überprüfen, ob die Zeichenfolge eine bestimmte Struktur hat

options:blue;white;yellow; 

ich überprüfen mag, wenn der String mit String beginnt, gefolgt von : gefolgt von n-Zahlen von Strings getrennt durch ;

Und etwas, was wichtig ist - String in Kyrillisch sein kann, lateinische Buchstaben sind

+0

Eine bestimmte Anzahl von Zeichenfolgen durch ';' getrennt? Ist die Codierung UTF-8? – Will

+0

ja, utf-8 ist die Codierung – Europeuser

+0

Können die Strings Zahlen oder Symbole enthalten? – Will

Antwort

1

nur die in Ihrer Frage aufgeführten Einschränkungen Unter der Annahme, benötigt nicht nur, dies die Zeichenfolge zu validieren:

$number = 3; 
$regex = sprintf('/^[^:]+:(?:[^;]+;){%d}$/', $number); 

if (preg_match($regex, $string)) { 
    echo "It matches!"; 
} else { 
    echo "It doesn't match!"; 
} 

Hier ist ein Beispiel davon in Aktion, mit php -a:

php > $number = 3; 
php > $regex = sprintf('/^[^:]+:(?:[^;]+;){%d}$/', $number); 

php > if (preg_match($regex, 'options:blue;white;yellow;')) { 
php {  echo "It matches!"; 
php { } else { 
php {  echo "It doesn't match!"; 
php { } 
It matches! 

php > if (preg_match($regex, 'options:blue;white;yellow;green;')) { 
php {  echo "It matches!"; 
php { } else { 
php {  echo "It doesn't match!"; 
php { } 
It doesn't match! 

Sie here diese regex visualisieren. Lassen Sie uns es brechen:

/.../   Start and end of the pattern. 
^    Start of the string. 
[^:]+   At least one character that is not a ':'. 
:    A literal ':'. 
(?:[^;]+;){N} Exactly N occurrences of: 
        [^;]+ At least one character that is not a ';'. 
        ;  A literal ';'. 
$    End of the string. 
+0

#Will, nachdem ich es getestet habe, kann ich bestätigen, dass es teilweise funktioniert. Ich nehme an, dass $ number = 3 die Anzahl der Optionen definiert, aber wie gesagt, es wird eine Anzahl von Optionen haben, was die Aufgabe komplizierter macht, oder? – Europeuser

+0

Ich verstehe nicht ... '$ Nummer' ist dein' n'. Wenn Sie im Voraus wissen, wie viele zu erwarten sind, setzen Sie '$ number 'auf diese Zahl. Oder meinst du, du weißt nicht, was 'n' sein wird? – Will

+0

ja Will, aber ich sortierte aus, indem ich dies änderte in: $ number = count (explode (';', rtrim ($ _ POST ['addoptions'], ";"))); Es funktioniert wie erwartet, danke! – Europeuser

Verwandte Themen