【发布时间】:2011-05-01 22:04:47
【问题描述】:
PHP switch/case 语句中是否允许使用正则表达式以及如何使用它们?
【问题讨论】:
-
您能否通过举例说明您要完成的工作来澄清这一点?
标签: php switch-statement
PHP switch/case 语句中是否允许使用正则表达式以及如何使用它们?
【问题讨论】:
标签: php switch-statement
请记住,上面的答案可以像这样稍微优化:
变化:
switch $name {
case (preg_match('/John.*/', $name) ? true : false) :
// do stuff for people whose name is John, Johnny, ...
break;
}
收件人:
switch $name {
case (bool)preg_match('/John.*/', $name) :
// do stuff for people whose name is John, Johnny, ...
break;
}
【讨论】:
是的,但是当 switch 参数 eval 为 false 时,您应该使用这种技术来避免问题:
switch ($name) {
case preg_match('/John.*/', $name) ? $name : !$name:
// do stuff
}
【讨论】:
preg_match("/regex/", $foo) ? true : false;。我不能吗?
switch() 的主题,而从 preg_match() 三元组返回 true 或 false可能会产生意想不到的结果,如@NikiC 的空字符串示例。
Switch-case 语句的工作方式类似于 if-elseif。
除了可以将正则表达式用于 if-elseif 之外,您还可以在 switch-case 中使用它。
if (preg_match('/John.*/', $name)) {
// do stuff for people whose name is John, Johnny, ...
}
可以编码为
switch $name {
case (preg_match('/John.*/', $name) ? true : false) :
// do stuff for people whose name is John, Johnny, ...
break;
}
希望这会有所帮助。
【讨论】:
$name 计算结果为 true 时有效。如果$name == '' 这将产生错误的结果。 -1
Are regex's allowed in PHP switch/case statements and how to use them ?
case中的preg_match()语句可以简化为case (!!preg_match('/John.*/', $name)):
没有或只有有限的。例如,您可以切换为 true:
switch (true) {
case $a == 'A':
break;
case preg_match('~~', $a);
break;
}
这基本上为您提供了一个if-elseif-else 语句,但具有switch 的语法和可能(例如失败。)
【讨论】:
breaking),你应该使用if。它更干净。