如果string为空,则使用preg_match返回true

时间:2013-01-26 14:23:23

标签: php preg-match switch-statement

我的开关和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

但如果$WORD为空或$WORD = "",则情况也是如此,并打印

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

我怎么能解决它? 我试过

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

但是不能工作

3 个答案:

答案 0 :(得分: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;
 }

答案 1 :(得分: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;
}

答案 2 :(得分:0)

我无法理解为什么使用switch来选择布尔值

当$ WORD为“”时,

switch($ WORD)等于switch(false)

然后你的问题发生了

为什么不

if(preg_match("/^(?:.+-)?(\d+?)$/i",  $WORD , $ID )){
echo "valid ";
}else{
echo $WORD;
}