Разрешено ли регулярное выражение в операторах switch/case PHP и как их использовать?
Regexp в инструкции switch
Ответ 1
Оператор switch-case работает как if-elseif.
Кроме того, вы можете использовать регулярное выражение для if-elseif, вы также можете использовать его в коммутационном футляре.
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;
}
Надеюсь, что это поможет.
Ответ 2
Нет или ограничено. Вы можете, например, переключиться на true
:
switch (true) {
case $a == 'A':
break;
case preg_match('~~', $a);
break;
}
В основном это дает оператор if-elseif-else
, но с синтаксисом и способностью switch
(например, проваливаться.)
Ответ 3
Да, но вы должны использовать эту технику, чтобы избежать проблем, когда аргумент switch evals равен false
:
switch ($name) {
case preg_match('/John.*/', $name) ? $name : !$name:
// do stuff
}