检查字符串以查看是否存在特定分组(PHP)?

时间:2009-08-09 23:06:11

标签: php mysql string

情况:用户输入用户名和密码。现在用户输入名为Game_Admin的用户名。因此,试图模仿成为网站的主导力量并欺骗他人。

目前我的登录脚本检查长度特征,并查看它是否已存在。我的问题如何在我们的示例中检查玩家是否输入特定的字符分组,我试图阻止重复的分组是“管理员”。因此,如果管理员出现这个词是否是(myAdminaccount,pizzaAdmin,GreatestAdmin)。我想知道我会使用某种循环来逐个字符地搜索每个用户名,还是他们的另一种更简单的方法?

比你们所有人的建议确实有很多方法可以解决这个问题。我希望这个主题对于决定使用类型的其他人来说是一个很好的参考。我正在测试它们并权衡我的选择,但我相信我找到了最适合我的解决方案:)

4 个答案:

答案 0 :(得分:1)

请查看stristr以获取不区分大小写的字符串匹配:

<?php
  $string = 'TehAdmin';
  if(stristr($string, 'admin') === FALSE) {
    echo '"admin" not found in string';
  } else {
    echo '"admin" found in string';
  }
  // outputs: "admin" found in string
?>

要获得额外的娱乐,您可以使用str_ireplace将空白字符串替换为admin的出现次数:

<?php
$string = str_ireplace("admin", "", $string);
?>

http://www.php.net/manual/en/function.str-ireplace.php

答案 1 :(得分:1)

有很多方法可以做到这一点。我会使用stripos(不区分大小写):

$findme    = 'admin';
$mystring = 'This is a fake string';

$pos1 = stripos($mystring, $findme);

// Nope, 'admin' is not in $mystring
if ($pos1 === false) {
    echo "The string '$findme' was not found in the string '$mystring'";
}

答案 2 :(得分:1)

我建议用户注册时,在接受表单提交之前,请在黑名单中检查用户名。如果您使用现成的软件,它可能支持此功能。

在进行表单验证时对PHP strpos()进行测试:

$badlist = Array(
  'admin',
  'staff',
  'official'
);

foreach($badlist as $badword){
  if (strpos(strtolower($_POST['username']), $badword)!==FALSE)
    die('fail');
}

希望有所帮助:)

答案 3 :(得分:0)

好吧,您可以使用多个函数之一来确定一个字符串是否包含另一个字符串,stristr()和preg_match()是常用的函数。

$input = 'Game_Admin';

if ( FALSE !== stristr( $input, 'admin' ) )
{
  // whatever
}

if ( preg_match( "/admin/i", $input ) )
{
  // whatever
}

虽然我担心您似乎根据用户名的子字符串为用户分配了角色。这不是解决这个问题的好方法。最好在数据库中定义角色和权限。