我有一些硬编码的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的人来说,我希望这是一个不用考虑的事情 - 我一直在匆匆学习!
答案 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"]))