要求的表单字段中不允许有空格
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){
我有一个注册表单,允许用户创建用户名和密码。它要求 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){