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()
。而是好方法。