测试字符串是否可以是布尔值


Test if string could be boolean PHP

我从$_GET得到一个字符串,我想测试它是否可以是一个布尔值,在我将它用于mysql查询的一部分之前。还有比

更好的方法吗?
function checkBool($string){
    $string = strtolower($string);
    if ($string == "true" || $string == "false" || 
        $string == "1" || $string == "0"){
        return true;
    }
    else {
        return false;
    }
}
if (checkBool($_GET['male'])){
    $result = mysql_query(
        "SELECT * FROM my_table " .
        "WHERE male='".$_GET['male']."'") or die(mysql_error());
}

您可以使用is_bool()或php.net上的建议:

<?php
$myString = "On";
$b = filter_var($myString, FILTER_VALIDATE_BOOLEAN);
?>
http://php.net/manual/en/function.is-bool.php

后者将接受像"on"answers"yes"这样的字符串为真。

顺便说一下,有一种更简洁的写法:

function checkBool($string){
    $string = strtolower($string);
    return (in_array($string, array("true", "false", "1", "0", "yes", "no"), true));
}

但是的。你写的那个是唯一的方法

如果您使用标志FILTER_NULL_ON_FAILURE, filter_var()将很好地工作:

function CheckBool($Value) {
  return null !== filter_var($Value, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
}

不,你得到了它,你没有什么可以做的,你得到了所有可能的值,通常会被认为是真或假,你做比较的方式是正确的,你可以使用IN_ARRAY来优化它,但即使如此,我发现这个版本已经很好了

布尔变量包含真值或假值。要测试string是否可以是布尔值,可以使用不同的方法:

  • is_bool($var):函数is_bool()检查变量的类型是否为布尔值并返回true或false。

  • 使用"==="或($var===true || $var=== =false)比较:如果您将变量与操作符"==="与true和false进行比较如果它与其中一个值相同,那么它就是一个布尔值。因为is_bool($var)的功能是相同的,所以函数应该优先考虑。

  • 使用"=="或($var == true | $var == false)的比较:如果您使用"=="作为操作符,则测试更具容忍度。例如,0(整数)或" "(空字符串)也会产生布尔值。

阅读更多在如何检查一个变量是否是一个布尔值在PHP?

您的checkBool()是非常正确的,恕我直言,尽管结果SQL代码存在问题。您可以使用TRUE和FALSE,但必须注意它们不是字符串:

常数TRUE和FALSE的值分别为1和0。的常数名可以用任意字母书写。

所以这里写着:

"SELECT * FROM my_table WHERE male='".$_GET['male']."'"

…它应该是这样写的:

'SELECT * FROM my_table WHERE male='.$_GET['male']

如果checkBool()实际上是convertToBool(),感觉会更好,你会用它的结果值而不是原来的$_GET来提供你的查询,但你的代码并不是真的错了。

顺便说一句,我假设你正在使用BOOL列类型。手册是这样说的:

这些类型是TINYINT(1)的同义词。考虑值为0假的。非零值被认为是真

当然,这取决于您是否使用BOOL, ENUM, CHAR(1)或其他任何东西,以及是否接受33作为TRUE的同义词;-)

无论如何,如果您真的想接受来自用户的"yes"或"no"作为有效输入,那么我会这样做:

function toBoolean($string){
    $string = strtolower($string);
    if ($string == "true" || $string == "1"|| $string == "yes" )
        return true;
    elseif ($string == "false" || $string == "0" || $string == "no")
        return false;
    else
        throw new Exception("You did not submit a valid value, you naughty boy");
}
try {
    $query = "SELECT * FROM my_table WHERE male=" . (toBoolean($_GET['male']) ? "1" : "0" );
    $result = mysql_query($query) or die(mysql_error());
} catch (Exception $e) {
    // handle bad user input here
}

您可以使用is_bool来测试您的字符串:

if(is_bool($val)){
  // is boolean
}else{
  // not a boolean
}