【问题标题】:PHP Prevent the submission of empty fields containing only "space" charactersPHP 防止提交仅包含“空格”字符的空字段
【发布时间】:2013-07-22 15:46:55
【问题描述】:

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

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

$variable = mysql_real_escape_string(stripslashes(trim($_POST['field'])));

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

if(empty($variable)) {
//do something
}

【问题讨论】:

  • 我建议你推迟逃避任何事情,直到最后一刻;相反,让 PDO 或类似技术为您处理它。这将允许您在发送存储之前使用和测试用户提交的原始数据。

标签: php forms validation input space


【解决方案1】:

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

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

如前所述,empty() 将返回一个布尔值(并且需要 5.5 之前的变量参数),指示传递的变量是否为“” .

但是,这可能会导致一些特殊的行为。考虑以下几点:

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

* 我可以预见到:“我有多少次因公开猥亵而被捕?嗯,好吧0...输入无效!?它怎么知道!? "

PHP 会将仅包含 "0" 的字符串评估为空:

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

最好的办法是通过等式(也测试类型)将修剪后的字符串与空字符串进行测试:

if (trim($value) !== '') {
    // the string wasn't empty
    // after calling trim()
}

empty(0) 问题是一种极端情况,但避免它可能会使您免于扯断头发。

【讨论】:

    【解决方案2】:

    你可以trim发布的输入,看看是不是empty,如果是,显示错误。

    if(empty(trim($_POST['comments'])))
    {
        // Its empty so throw a validation error
        echo 'Input is empty!'; 
    }
    else
    {
        // Input has some text and is not empty.. process accordingly.. 
    }
    

    更多关于trim()的信息可以在这里找到:http://php.net/manual/en/function.trim.php

    【讨论】:

    • 要进行更高级的检查,您可以阅读“正则表达式”。例如,“[a-zA-Z0-9_\-]{3,20}”的正则表达式只允许名称包含字母数字字符或“_”或“-”,并且必须至少包含 3 个字符并且最多 20 个。例如,您可以从这里开始:regular-expressions.info
    • 我已经尝试过了,并假设它已被弃用或收到此错误:致命错误:无法在第 19 行 *** 的写入上下文中使用函数返回值
    • 正则表达式对于这个目的来说太过分了。
    • 我怀疑 trim 是否会被弃用,这就像试图弃用“echo”或“var_dump”一样。也就是说,粘贴第 19 行,看来您使用的 trim 错误。
    • 啊,你需要先修剪它,然后再在 empty() 附带的 if 语句中使用它,我在我的表单数据集变量上使用了修剪,而不是直接在 $_POST 数据上,我应该做的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    相关资源
    最近更新 更多