PHP - 正则表达式作为数组键

时间:2015-11-21 20:35:46

标签: php arrays regex

我需要将regex设置为我的页面中的路由的数组键以接受年份。我是什么意思:

$segment = URL::segment(0); //get first segment for example login, or 2015 - as year

$routes = [ 
"/" => "home.php",
"login" => "login.php",
"some_regex_here" => "year_posts.php"
]

//now check if $segment exists in array $routes
if(isset($routes[$segment])
   URL::redirect($routes[$segment]);
else
   URL::show404();//page in $segment isn't available in $routes array

现在,当我转到localhost/2015时,$segment将为2015,因此它与密钥中的正则表达式条件匹配,并且应该将我重定向到year_posts.php。 你有任何想法怎么做吗?

1 个答案:

答案 0 :(得分:0)

让我们从正则表达式开始:

快速和结实:这将检查字符串是否只是四个(数字)数字:

'/^\d\d\d\d$/'

也可以写成:

'/^\d{4}$/'

如果要检查特定年份范围,则会变得更复杂。例如。将此用于2010年至2015年:

'/^201[0-5]$/'

现在对于PHP:您不能将正则表达式用作数组键。您可能需要另一个if,如下所示:

if(preg_match('/^201[0-5]$/', $segment))
{
  URL::redirect("year_posts.php");
}
elseif(isset($routes[$segment])
{
  URL::redirect($routes[$segment]);
}
else
{
  URL::show404();//page in $segment isn't available in $routes array
}