我有一个注册表单,允许用户创建用户名和密码。它要求username
字段不为空,但我需要要求它根本不允许空格。
我调查了preg_match()
但似乎无法与我当前的代码合作。
if ($_SERVER["REQUEST_METHOD"] == "POST") {
/* Validate Username */
if (empty(trim($_POST["username"]))) {
$username_err = "Username Required";
}
答案 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){