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)
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)
问题是一种边缘情况,但避免它可能会让你免于抓狂。