我一直在为注册表单创建一些验证,在验证用户名时遇到错误。
我在firstname和lastname上都使用了“Test”输入,当它应该允许输入时我仍然会收到错误,因为
!preg_match('/^[a-z]*$/i', $value)
应该允许使用小写和大写字符吗?
我得到的错误似乎只是触发了firstname而不是姓氏。
<?php
if (isset($_POST['submit'])){
require_once 'config.php';
$errors = [];
foreach($_POST as $field => $value){
if($field === 'firstname' || $field === 'lastname' && !preg_match('/^[a-z]*$/i', $value)){
$errors[] = "{$field} has invalid characters please try again.";
echo $error;
}
}
}
?>
答案 0 :(得分:1)
您的&#34; OR&#34;周围缺少方括号。条件。 &#34; AND&#34;优先于&#34; OR&#34;。
if(($field === 'firstname' || $field === 'lastname') && !preg_match('/^[a-z]*$/i', $value)){
$errors[] = "{$field} has invalid characters please try again.";
}
注意:在上面的代码中,您有一个&#34;未定义的变量&#34; :$error
。
答案 1 :(得分:0)
我建议:
您使用:in_array($key,['firstname','lastname'])
而不是两次单独的检查,使您的条件更直接/简短/干燥。
当存在旨在执行相同任务的非正则表达式函数时,您可以避免不必要地使用正则表达式函数:!ctype_alpha($value)
这是实现的样子:(Demo)
$_POST=['submit'=>'','firstname'=>'legit','lastname'=>'n0tl3g!t'];
$errors=[];
foreach($_POST as $key=>$value){
if(in_array($key,['firstname','lastname']) && !ctype_alpha($value)){
$errors[]="$key field contains invalid value: $value";
}
}
var_export($errors);
输出:
array (
0 => 'lastname field contains invalid value: n0tl3g!t',
)
至于改善应用程序的用户体验,我建议在表单中使用HTML5验证,以防止提交无效的字段值,如此...
<input type="text" name="firstname" required pattern="[a-zA-Z]+" placeholder="letters only">