0

スイッチと preg_match ケースに問題があります。コードは次のようになります

switch( $WORD ){

    case ( preg_match("/^(?:.+-)?(\d+?)$/i",  $WORD , $ID )  ? true : false ):
        echo "valid ". $ID ." test -> " .preg_match("/^(?:.+-)?(\d+?)$/i",  $WORD );
    break;

    default:
        echo $WORD;
    break;
}

これらのコードは

$WORD = "TEST";        print => TEST
$WORD = "TEST-1";      print => valid 1 test -> 1
$WORD = "TEST-2552";   print => valid 2552 test -> 1
$WORD = "343";         print => valid 343 test -> 1

ただし、$WORDnull または$WORD = ""ケースも true の場合は印刷されます

$WORD = "";      print => valid  test -> 0

どうすれば修正できますか?私は試してみました

case ( ( preg_match("/^(?:.+-)?(\d+?)$/i",  $WORD , $ID ) == 1 )  ? true : false ):

しかし、うまくいきません

4

3 に答える 3

2

私は簡単なトリックでそれを解決したので、誰かがそれを解決する方法である同じ問題を抱えている場合...(現時点では、より良い方法が存在するかどうかはわかりません)

ケースの直前に次のpreg_matchようなケースを追加しますcase "":

switch( $WORD ){

    default:
    case "":
        // call a function
    break;

    case preg_match("/^(?:.+-)?(\d+?)$/i", $WORD, $ID ) ? true : false:
        echo "valid and id is: ". $ID ;
    break;

    // all other common cases
    case "home":
    case "dog":
    case "cat":
    case "fish":
        // call a function
    break;

    case "bull":
    case "shark":
    case "somethingelse":
        // call a function
    break;
 }
于 2013-01-26T15:08:05.147 に答える
0

スイッチを使用してブール値を選択している理由がわかりません

$WORDが""の場合、switch($ WORD)はswitch(false)と等しくなります

その後、あなたの問題が発生します

なぜだめですか

if(preg_match("/^(?:.+-)?(\d+?)$/i",  $WORD , $ID )){
echo "valid ";
}else{
echo $WORD;
}
于 2013-01-26T14:38:07.093 に答える
0

これはswitch意図された方法ではなく、このように機能するかどうかさえわかりません。の全体的な考え方はswitch、連鎖ステートメントの短い表記を使用することifです。

if ($foo == 1) { ... }
else if ($foo == 2) { ... }
else if ($foo == 3) { ... }
else { ... }

になります

switch ($foo) {
   case 1: ... break;
   case 2: ... break;
   case 3: ... break;
   default: ...
}

特に、非常に複雑な条件がある$foo場合は、重複したコードをたくさん保存できます。あなたの場合、使用するswitchことはあまり意味がありません。一緒に行くだけでif、あなたは行ってもいいです:

if (preg_match("/^(?:.+-)?(\d+?)$/i",  $WORD , $ID )) {
    echo "valid ". $ID ." test -> " .preg_match("/^(?:.+-)?(\d+?)$/i",  $WORD );
} else {
    echo $WORD;
}
于 2013-01-26T14:30:43.973 に答える