我的开关和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 ):
但是不能工作
答案 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;
}