要求的表单字段中不允许有空格

Allow no whitespace in required form field

我有一个注册表单,允许用户创建用户名和密码。它要求 username 字段不能为空,但我需要要求它根本不允许有空格。

我调查了 preg_match(),但我似乎无法让它与我当前的代码合作。

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    /* Validate Username */
    if (empty(trim($_POST["username"]))) {
        $username_err = "Username Required";
    }

如此简单的事情不需要使用正则表达式。使用 strrpos() 您可以找到字符串(用户名)中最后一次出现的子字符串(space 字符)。

如果 strrpos 没有找到匹配项,它将 return 为假。所以你所要做的就是检查 strrpos return 是否除了 false:

if (empty(trim($_POST["username"]))) {
    $username_err = "Username Required";
} else if (strrpos($_POST["username"], ' ') !== false){
    $username_space_err = "Space found in username";
}

$_POST() 上调用任何函数之前,我建议在元素上调用 isset() 以避免收到通知。

使用 isset() 将允许有效但不太可能的用户名 0

在未设置的元素上调用 trim() 将导致通知。

我看不出使用 strrpos() 从字符串后面检查空格有什么好处,所以我将简单地调用 strpos().

如果这是一个简单的 pass/fail 任务(不是试图找出失败的原因),请使用:

代码:(Demo)

$_POST['username']="0";

if(isset($_POST['username']) && strlen($_POST['username']) && strpos($_POST['username'],' ')===false){
    echo 'pass';
}else{
    echo 'fail';
}

输出:

pass

这个单行条件的美妙之处在于,一旦其中一个条件失败,其余的将被忽略并显示失败消息。


如果你想对微优化有点疯狂,你可以删除 strlen() 调用,只检查第一个字符是否存在(查看第一个 "offset" 是否设置) .

if(isset($_POST['username'][0]) && strpos($_POST['username'],' ')===false){
    echo 'pass';
}else{
    echo 'fail';
}

如果我们戴上锡箔帽子,那么在调用 strpos() 之前检查 $_POST['username'] 是否不是数组(在任何关于此的解决方案中)页)。

if(isset($_POST['username'][0]) && !is_array($_POST['username']) && strpos($_POST['username'],' ')===false){