ctype_digit验证无法使用ajax传递0

时间:2014-03-27 09:37:38

标签: php jquery ajax isnumeric

我有以下情况:

<select name="n">
    <option>Please fill</option>
    <option value="0">0</option>
    <option value="1">1</option>
</select>

现在,我使用Ajax传递序列化表单。我在控制台的POST面板中正确地看到了这一点:

[...]&n=0&[...]

我的php验证脚本会检查字段是否已填写,并且出于安全考虑,它是一个数字:

parse_str($_REQUEST['data'], $values);
if (!ctype_digit($values['n'])) {
    array_push($err, 'n');
}

有人可以解释为什么如果我传递值0这个检查总是失败?如果我通过任何其他选择选项的数字不是0,它让我... 我也尝试使用is_numeric而不是ctype_digit(只是为了尝试),它也失败了。但这没有任何意义......因为0既是数字又是数字!

更新 如果我var_dump($values['n']),我知道它是空的......那么parse_str($_REQUEST['data'], $values)是否有任何问题?

1 个答案:

答案 0 :(得分:3)

0'0'(作为整数和字符串)都被视为false。因此!$values['n']truectype_digit工作得很好。您可能想要检查!isset($values['n'])而不是!$values['n']