PHP 防止提交仅包含“空格”字符的空字段

Eng*_*ine 1 php forms validation space input

使用 PHP 时,如何验证简单的文本输入以检查该字段是否仅包含空格字符,我想防止使用仅包含空格的空白名称注册到我的网站,其他输入也是如此比如评论?如果我检查它是否为空,它只会将其返回为非空,因为它无论如何都会将空格视为字符。

为了供将来参考,答案是首先修剪我的帖子数据:

$variable = mysql_real_escape_string(stripslashes(trim($_POST['field'])));
Run Code Online (Sandbox Code Playgroud)

在这里也对其进行了清理,然后对于验证,您可以只使用empty():

if(empty($variable)) {
//do something
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*ugg 5

trim()将删除前导/尾随空格,根据文档:

从字符串的开头和结尾去除空格(或其他字符)

正如已经讨论过的,empty()将返回一个布尔值(并且需要 5.5 之前的变量参数),指示传递的变量是否为“”。

然而,这可能会导致一些奇怪的行为。考虑以下:

$value = "0";            // possibly a perfectly valid non-empty value *
var_dump(empty($value)); // bool(true) ... what?
Run Code Online (Sandbox Code Playgroud)

* 我可以预见到这一点:“我因公然猥亵罪被捕了多少次?嗯,好吧0……输入无效!?它怎么知道!?

PHP 将仅将字符串评估"0"为空:

  • “”(空字符串)
  • 0(0 作为整数)
  • 0.0(0 作为浮点数)
  • “0”(0 作为字符串)
  • 无效的
  • 错误的
  • array() (空数组)
  • $var; (声明了一个变量,但没有值)

最好的选择是通过相同的相等性(它也测试类型)来测试修剪后的字符串与空字符串:

if (trim($value) !== '') {
    // the string wasn't empty
    // after calling trim()
}
Run Code Online (Sandbox Code Playgroud)

这个empty(0)问题是一种边缘情况,但避免它可能会让你免于抓狂。