2012-04-20 29 views
6

Мне нужно проверить строку, чтобы определить, содержит ли она какие-либо символы, отличные от |, чтобы назначить переменные, которые имеют ничего, кроме |, значение NULL (теоретически может быть любое число | символов, но это, вероятно, не более 5-6). Вроде ||||Как проверить, содержит ли строка только определенные символы

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

+1

Можете ли вы привести пример строки, которую вы манипулируете? – jprofitt

ответ

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

или:

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

oooh Это позволяет мне продолжать не знать регулярное выражение! : p – Damon

+0

Первое решение выходит из строя на «\ n |» потому что по умолчанию регулярные выражения не пересекают несколько строк. – giorgiosironi

2

Да, вы можете использовать регулярные выражения:

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

Самый быстрый и простой способ, возможно, функция stripos. Она возвращает позицию строки внутри другой, или ложь, если она не может быть найдена:

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

false === необходим для строгого сравнения типа, поскольку stripos может возвращать ноль, указывающий, что | находится на первом символе.

Вы можете использовать более совершенный механизм проверки, который упрощает чтение. Я рекомендую Respect\Validation. Образец использования:

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

* Не содержит * - это не то же самое, что * содержит что-либо помимо * ... – deceze

1

Я хотел проверить, содержит ли строка только определенные символы. Для того, чтобы предотвратить двойное отрицание (потому что я нахожу их труднее те прочитать), я решил использовать следующее регулярное выражение:

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

Это проверяет строку от начала до конца, чтобы только содержать | символов (по крайней мере, один).

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