PHP Regex用于过滤_POST用户名中的域名

时间:2012-10-29 02:15:18

标签: php regex post

我有一些硬编码的if / else语句来设置$ page变量 - (以后用于标题:“。page”) - 基于$ _POST [“username”]输入的给定网站。

CODE:

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的人来说,我希望这是一个不用考虑的事情 - 我一直在匆匆学习!

2 个答案:

答案 0 :(得分:1)

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

将捕获以domain2.com结尾的用户名。请注意点的反向斜线。如果您想针对相反的情况进行测试(也称为 NOT domain2.com结束),请在preg_match()函数前使用感叹号。

这就是你问的问题吗?

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

编辑2:为了便于阅读和控制,我会将其包装在一个函数中,但这是我自己的偏好所以它不是建议的方法或任何东西。如果您的代码冗长而复杂......

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']);

答案 1 :(得分:0)

该行:

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

必须是:

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