2014-11-18 4 views
5

Wie könnte dies mit Regex gemacht werden?Test, ob eine Zeichenkette gleich einer der Zeichenketten ist (mit Regex)

return ($s=='aa' || $s=='bb' || $s=='cc' || $s=='dd') ? 1 : 0; 

Ich versuche:

$s = 'aa'; 
$result = preg_match('/(aa|bb|cc|dd)/', $s); 
echo $result; // 1 

aber offensichtlich diese kehrt 1 wenn $s eine oder mehrere der angegebenen Strings enthält (nicht, wenn es um eine von ihnen gleich ist).

Antwort

9

Sie müssen Start ^ und Ende $ Anker verwenden, um eine exakte Zeichenfolge Übereinstimmung zu tun.

$result = preg_match('/^(aa|bb|cc|dd)$/', $s); 
3
$s = 'aa'; 
$result = preg_match('/^(aa|bb|cc|dd)$/', $s); 
echo $result; 

Verwenden^und $ der angeben, von Anfang an dem Eingangs bis zum Ende entsprechen.

3

Ich denke RegEx Overkill für dieses Problem.

Meine Lösung:

$results = array('aa', 'bb', 'cc', 'dd'); 
$c = 'aa'; 

if(in_array($c, $results, true)) { 
    echo 'YES'; 
} else { 
    echo 'NO'; 
} 
+2

Was es bedeutet, "Overkill"? Ich bin nicht mit dir einverstanden. –

+1

Der Unterschied ist vernachlässigbar, können Sie verwenden, was Sie bevorzugen - https://eval.in/223092 – Styphon

+0

@Styphon, Ihr Vergleich nicht gleich. https://eval.in/private/81d6123d2cd184 - https://eval.in/private/481f2ed8552cb2 –

Verwandte Themen