2016-07-11 1 views
1

Как я могу проверить с помощью php с preg_match(), если строка имеет определенную структуру. Например строка:preg_match, чтобы проверить, имеет ли строка определенную структуру

options:blue;white;yellow; 

Я хочу, чтобы проверить, если строка начинается с строкой с последующим : с последующим п-числом строк, разделенного ;

И то, что важно - строка может быть в кириллице, не только латинские буквы

+0

Конкретное количество строк, разделенных символом ';'? Является ли кодировка UTF-8? – Will

+0

Да, utf-8 - это кодировка – Europeuser

+0

Могут ли строки содержать числа или символы? – Will

ответ

1

Предполагая, что только ограничения, перечисленные в вашем вопросе необходимы, это будет проверять строку:

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

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

Вот пример этого в действии, используя 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! 

Вы можете визуализировать это регулярное выражение here. Давайте разложим его:

/.../   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

# После того, как я протестировал его, я могу подтвердить его частично. Я полагаю, что $ number = 3 определяет количество опций, но, как я сказал, у него будет n-число опций, что усложняет задачу, не так ли? – Europeuser

+0

Я не понимаю ... '$ number' является вашим' n'. Если вы заранее знаете, сколько нужно ожидать, установите для этого числа '$ number'. Или, вы имеете в виду, что не знаете, что такое 'n'? – Will

+0

да Будет, но я разобрался, изменив это на: $ number = count (explode (';', rtrim ($ _ POST ['addoptions'], ";"))); Он работает, как ожидалось, спасибо! – Europeuser

 Смежные вопросы

  • Нет связанных вопросов^_^