【问题标题】:problem on switch case开关盒问题
【发布时间】:2011-04-06 08:40:23
【问题描述】:

如何修复它或添加正则表达式?

case substr($rrr['url'],-4)=='.jpg' || '.png' || '.gif' || '.tif' || '.tiff': 

【问题讨论】:

  • 检查是否区分大小写? http://example.com/icon.JPG查询参数呢? http://example.com/icon.jpg?src=search其他页面呢? http://example.com/evil#justlookslegit.jpg
  • 尝试strrchr($rrr["url"], ".") 获取扩展名。

标签: php regex switch-statement


【解决方案1】:

这样的?

case in_array(substr($rrr['url'],-4), array('.jpg','.png','.gif','.tif')):
case in_array(substr($rrr['url'],-5), array('.tiff')):

请注意,我在case-表达式之间省略了break;

也很酷:

case in_array(pathinfo($rrr['url'], PATHINFO_EXTENSION), array('jpg','png','gif','tif', 'tiff')):

问题中的 sn-p 不起作用,因为它被评估为(缩短)

(substr($rrr['url'],-4)=='.jpg') || '.png'

这可行,但显然它没有多大意义,而且很可能不是预期的。

更新:这个解决方案看起来更干净。它假设$rrr['url'] 是这里唯一有趣的。见 cmets

switch (pathinfo($rrr['url'], PATHINFO_EXTENSION)):
  case 'jpg':
  case 'png':
  case 'gif':
  case 'tif':
  case 'tiff':
    do_something();
  break;
}

【讨论】:

  • 如果这确实被用作switch case,这将不会像您期望的那样起作用。如果它确实有效,那只是因为该表达式的结果恰好与switch 比较值进行了松散的比较。
  • @deceze:提问者省略了switch($expr)-部分,所以我不得不猜测。也许它只是switch(true)
  • @King 当然,但这会很奇怪,需要指出。
  • @deceze: 嗯.. 有效点。可能是我猜的有点多。但是switch(true) 有什么奇怪的地方?
  • @King IMO switch(true) 滥用switch 声明,最好用if 代替。也许那只是我。
【解决方案2】:
  1. $foo == A || B || C 不起作用,这需要是 $foo == A || $foo == B || $foo == Cin_array($foo, array(A, B, C))
  2. switch 语句中不能有复杂的cases。每个案例只能有一个值,比较值将与之进行比较。你必须把它写成单独的直通cases:

    switch ($foo) {
        case A :
        case B :
        case C :
            bar();
            break;
    }
    

【讨论】:

    【解决方案3】:

    您不能为此使用A == B || C || D 语句,只能使用A == B || A == C || A == D

    另外,url 可以有 GET 参数。

    【讨论】:

      【解决方案4】:

      您需要找到点的strrpos,在最右边的点位置(由 strrpos 返回)之后获取子字符串,定义允许扩展的数组(这也使您的代码可重用),然后像这样使用in_array: $rpos = strrpos($rrr['url'], '.'); $ext = substr($rrr['url'], $rpos+1); $allowedExtensions = array('jpg','png', 'gif', 'tif', 'tiff'); ///.... if (in_array($ext, $allowedExtensions)) { ///....

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多