Php 为什么';t switch()是否支持正则表达式?
我对Php 为什么';t switch()是否支持正则表达式?,php,regex,switch-statement,Php,Regex,Switch Statement,我对switch()的理解是它避免了重复字符串 如果是这样,为什么它不支持正则表达式,如下面的代码?或者我是否错过了开关()的要点 switch不是一般的条件语句,而是比较值。可以将其看作是扩展到一系列if语句 例如,考虑以下(伪代码): 扩展到如下内容: if (a == x) { } elseif (a == y) { } elseif (a == z) { } switch $username { case "": array_push($errors, "Username
switch()
的理解是它避免了重复字符串
如果是这样,为什么它不支持正则表达式,如下面的代码?或者我是否错过了开关()
的要点
switch不是一般的条件语句,而是比较值。可以将其看作是扩展到一系列if语句 例如,考虑以下(伪代码): 扩展到如下内容:
if (a == x) {
}
elseif (a == y) {
}
elseif (a == z) {
}
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;
}
因此,在您的一个案例中,正则表达式最终是:
if (a == regex_switch(...)) {
}
其中a是字符串…开关不是一般的条件语句,而是比较值。可以将其看作是扩展到一系列if语句 例如,考虑以下(伪代码): 扩展到如下内容:
if (a == x) {
}
elseif (a == y) {
}
elseif (a == z) {
}
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;
}
因此,在您的一个案例中,正则表达式最终是:
if (a == regex_switch(...)) {
}
其中a是字符串…,因为它不是。故事结束了 教训是,您需要想出一种绕过此约束的方法,而不是请求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;
}
}
因为它没有。故事结束了 教训是,您需要想出一种绕过此约束的方法,而不是请求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;
}
}
你可以这样做:
if (a == x) {
}
elseif (a == y) {
}
elseif (a == z) {
}
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;
}
你可以这样做:
if (a == x) {
}
elseif (a == y) {
}
elseif (a == z) {
}
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;
}
开关中的值将与每个案例中的值进行比较(即($username=='admin')
。您无法将值与正则表达式进行比较。当然,您可以,但它将与您的函数返回的值进行比较,即($username==regex_开关('/xxx.*/'))
。开关
es就是这样工作的。开关
中的值与每个大小写
值进行比较(即($username=='admin')
。您无法将值与正则表达式进行比较。当然,您可以,但它将与函数返回的值进行比较,即($username==regex_开关('/xxx.*/'))
。switch
es就是这样工作的。不是请愿,只是想了解switch()
。而是好方法。不是请愿,只是想了解switch()
。而是好方法。