我对switch()
的理解是避免重复字符串。
如果是这样,为什么它不支持正则表达式,如下面的代码?或者我错过了switch()
?
switch($username){
case "":
array_push($errors, "Username cannot be blank");
break;
case "admin":
array_push($errors, "Username cannot be 'admin'");
break;
case regex_switch('/xxx.*/'):
array_push($errors, "Username cannot begin 'xxx'");
break;
}
答案 0 :(得分:5)
switch不是一般条件语句,而是比较值。可以把它想象成扩展到一系列if语句。
例如,考虑以下(伪代码):
switch(a) {
case x: ... break;
case y: ... break;
case z: ... break;
}
扩展到类似:
if (a == x) {
}
elseif (a == y) {
}
elseif (a == z) {
}
所以你的一个案例中的正则表达式最终成为:
if (a == regex_switch(...)) {
}
其中a是字符串......
答案 1 :(得分:0)
因为它没有。故事结束。
经验教训是,您需要想出围绕这种约束的方式,而不是请求PHP开发人员实现某些深奥的功能,并且不会在此过程中完成任何工作。
为什么不:
$disallowed_usernames = array(
array('/^$/', 'be blank'),
array('/^admin/', 'begin with "admin"'),
array('/^xxx/', 'begin with "xxx"'),
);
foreach( $disallowed_usernames as $item ) {
if( preg_match($item[0], $username) ) {
array_push($errors, 'Username cannot ' . $item[1]);
break;
}
}
答案 2 :(得分:0)
您可以执行以下操作:
switch $username {
case "":
array_push($errors, "Username cannot be blank");
break;
case "admin":
array_push($errors, "Username cannot be 'admin'");
break;
case (preg_match('/^xxx.*/', $username) ? true : false) :
array_push($errors, "Username cannot begin 'xxx'");
break;
}