为什么strpos在这里不起作用?

时间:2013-11-26 04:29:16

标签: php username strpos

我正在制作一个函数,用于检查注册过程中的某个用户名是否包含我不希望用户在其用户名中使用的某些字符。它会向用户回应他们可以使用的字符。

public function checkUsername($username){       
    if(!empty($username)){  
        $exceptions= "!@~`#$%^&*()+=/\,;:[]{  }|?,<>"
this is line 26 from the error ->if(strpos($username, $exceptions) !=== false ){
        //here it means that something was found
            echo "Cannot contain special characters except - and _ .";
            return false;
        }//since it returns false, nothing after this gets executed.
    if(strlen($username) < 6){
        echo "Username must be at least 6 characters long to register.";
        return false;
    }
    $stmt = $this->db->prepare("SELECT username FROM users WHERE BINARY username = ? ");
    $stmt->bindParam(1,$username);
    $stmt->execute();   
    if($stmt->rowCount() == 1){
        echo "Sorry username already exists";     
        return false;
    } else{
        return true;
      } 
    }
}//end of checkUsername

它给出了一个Parse错误:语法错误,第26行意外的T_IF。

4 个答案:

答案 0 :(得分:1)

通常这样的错误发生在上面的一行而不是实际的行号本身。

似乎

中没有结束分号
$exceptions= "!@~`#$%^&*()+=/\,;:[]{  }|?,<>"

将其替换为

$exceptions= "!@~`#$%^&*()+=/\,;:[]{  }|?,<>";

答案 1 :(得分:0)

前一行缺少分号

$exceptions= "!@~`#$%^&*()+=/\,;:[]{  }|?,<>";

答案 2 :(得分:0)

!===可能应该是!==

答案 3 :(得分:0)

这里有很多东西被打破了。

首先,strpos匹配整个字符串,而不是任何包含的字符。你想在这里使用preg_match

其次,你的比较器应该是!== false,不是!=== false,但是使用preg_match,你不需要它。