1

我有一些硬编码的 if/else 语句来根据 $_POST["username"] 输入将 $page 变量(稍后在标题中使用:“.page”)设置为给定的网站。

代码:

if ($_POST["username"] == "username1@domain1.com") {
$page = "http://www.google.com";
}
 else if ($_POST["username"] == "username2@domain1.com"){
$page = "http://www.yahoo.com";
}
 else if ($_POST["username"] == "username1@domain2.com"){
$page = "http://www.stackoverflow.com";
}
 else if ($_POST["username"] == "username2@domain2.com"){
$page = "http://www.serverfault.com";
}
 else if ($_POST["username"] == "username@domain3.com"){
$page = "http://www.superuser.com";
}
 else if (!preg_match($domain2.com, $_POST["username"]))  { //THIS IS VERY WRONG
$page = "http://www.backblaze.com";
}
else{
$page = "DefaultBackupPage.php";
}

我想说的是,如果您的用户名末尾有“@domain.com”,请将 $page 设置为,在本例中为 backblaze.com,但可以是任何内容。

我知道这很混乱,我实际上并不喜欢这种实现。它只需要适合这个模式,我需要一个快速修复!

我收到的当前错误是正则表达式为空。我希望这对于了解 PHP 的人来说是毫无疑问的 - 我一直在匆忙尝试学习!

4

2 回答 2

1
if (preg_match('/@domain2\.com$/i',$_POST['username']))

将捕获以 . 结尾的用户名domain2.com。请注意点的转义反斜杠。如果您想针对相反的情况进行测试(也就是不结尾domain2.com),那么在函数之前使用感叹号preg_match()

这是你问的吗?

编辑 1:我将i标志添加到模式中以使其查找不区分大小写的匹配。

编辑2:为了可读性和控制,我会将它包装在一个函数中,但这是我自己的偏好,所以它不是建议的方法或任何东西。如果您的代码又长又复杂……</p>

function get_page($username) {
    $username = strtolower($username);
    switch ($username) {
        case "username1@domain1.com"    : return "http://www.google.com";
        case "username2@domain1.com"    : return "http://www.yahoo.com";
        case "username1@domain2.com"    : return "http://www.stackoverflow.com";
        case "username2@domain2.com"    : return "http://www.serverfault.com";
        case "username@domain3.com"     : return "http://www.superuser.com";
    }
    return preg_match('/@domain2\.com$/',$username) ?
    "http://www.backblaze.com" : "DefaultBackupPage.php";
}

$page = get_page($_POST['username']);
于 2012-10-29T02:21:16.990 回答
0

该行:

 else if(!preg_match($domain2.com, $_POST["username"]))

必须:

 else if(!preg_match("/domain2\.com/", $_POST["username"])) 
于 2012-10-29T02:21:32.950 回答