2010-11-29 21 views

Antwort

2

Verwenden Sie die schnellere strpos, wenn Sie nur auf das Vorhandensein von zwei Zahlen überprüfen müssen.

if(strpos($mystring, '|7|') !== FALSE AND strpos($mystring, '|11|') !== FALSE) 
{ 
    // Found them 
} 

Oder mit langsamer regex die Nummer

preg_match('/\|(7|11)\|/', $mystring, $match); 

Verwenden regexpal zu testen Regexes kostenlos zu erfassen.

+0

Dies wird auch für die Zahlen TRUE zurück, wie 17, 27, 71 und 111, 211 und 114 ein paar – Yeroon

+0

Dank zu nennen, dann ist dies eine viel einfachere Art und Weise und funktioniert! – ITg

+1

@Yeroon ah, nur vergessen, die Pfeife char. – Xeoncross

0

Wenn Sie wirklich preg_match verwenden möchten (auch wenn ich strpos empfehlen, wie auf Xeoncross' Antwort) verwenden:

if (preg_match('/\|(7|11)\|/', $string)) 
{ 
    //found 
} 
+0

Um klar zu sein, können Sie ersetzen '(7 | 11)' für '(7 | 11 | 13)' zum Beispiel, um eine 7, 11 oder 13 zu entsprechen. – cambraca

0

Angenommen, Ihre String beginnt und endet immer mit einem |:

strpos($string, '|'.$number.'|')); 
17

Verwenden \b vor und nach dem Ausdruck es als ganzes Wort nur zum Spiel:

$str1 = 'foo bar';  // has matches (foo, bar) 
$str2 = 'barman foobar'; // no matches 

$test1 = preg_match('/\b(foo|bar)\b/', $str1); 
$test2 = preg_match('/\b(foo|bar)\b/', $str2); 

var_dump($test1); // 1 
var_dump($test2); // 0 

So in Ihrem Beispiel wäre es:

$str1 = '|1|77|111|'; // has matches (1) 
$str2 = '|01|77|111|'; // no matches 

$test1 = preg_match('/\b(1|7|11)\b/', $str1); 
$test2 = preg_match('/\b(1|7|11)\b/', $str2); 

var_dump($test1); // 1 
var_dump($test2); // 0