在所需的表单字段中不允许有空格

时间:2017-12-07 22:40:34

标签: php forms validation trim

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

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

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

2 个答案:

答案 0 :(得分:1)

无需使用Regex这么简单的事情。使用strrpos(),您可以在字符串(用户名)中找到子串(空格字符)的最后一次出现。

如果strrpos找不到匹配项,则会返回false。所以你要做的就是检查strrpos是否返回除了false之外的任何内容:

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

答案 1 :(得分:0)

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

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

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

我没有看到从字符串后面检查strrpos()空格的任何优势,所以我只需拨打strpos()

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

代码:(Demo

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

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

输出:

pass

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

如果你想通过微优化获得一点疯狂,可以删除strlen()调用并检查是否存在第一个字符(查看是否设置了第一个“偏移量”)。

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

如果我们打开锡箔帽,那么在调用$_POST['username']之前应检查strpos()是否不是数组(在本页的任何解决方案中)

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