字符串比较无论如何

时间:2013-02-12 01:34:43

标签: php string-matching case-insensitive

我正在尝试以不区分大小写的方式找到“用户名”或“密码”的不同变体,如下所示:

$unVar1 = "username";
$unVar2 = "user name";
$usernameVariations1 = strcasecmp($unVar1, $unVar2);

$unVar3 = "User";
$unVar4 = "id";
$usernameVariations2 = strcasecmp($unVar3, $unVar4);

$pwVar1 = "password";
$pwVar2 = "pass";
$passwordVariations1 = strcasecmp($pwVar1, $pwVar2);

if ($element->value === $usernameVariations1
   || $element->value === $usernameVariations2
   || $element->value === $passwordVariations1) {
  echo "Weee!";
}
else {
  echo "boo!";
}

问题是它为boo输出中的每个元素输出“foreach()”。我究竟做错了什么?是否可以将所有这些值放在一个数组中?感谢。

1 个答案:

答案 0 :(得分:1)

你需要做的更复杂。如果您的用户名和密码不区分大小写,请在比较它们时将它们设为小写:

if (strtolower($username) === strtolower($element->value))
{
     // ok
}

现在,如果您允许将空格添加到中间和缩写,那么您可以尝试计划B:

$valid_usernames = array('Username', 'username', 'user name', 'UsE Nam');
if (in_array($element->value, $valid_usernames))
{
     // ok
}

请注意,您现在有责任保持$valid_usernames完整。