Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP名称验证_Php_Regex_Validation - Fatal编程技术网

PHP名称验证

PHP名称验证,php,regex,validation,Php,Regex,Validation,我一直在为注册表单创建一些验证,在验证用户名时遇到了一个错误 我对firstname和lastname都使用了一个输入“Test”,但当它应该允许输入时,我仍然得到一个错误,因为 !preg_match('/^[a-z]*$/i',$value)应该同时允许小写和大写字符吗 另外,我得到的错误似乎只是触发名字,而不是姓氏 <?php if (isset($_POST['submit'])){ require_once 'config.php'; $

我一直在为注册表单创建一些验证,在验证用户名时遇到了一个错误

我对firstname和lastname都使用了一个输入“Test”,但当它应该允许输入时,我仍然得到一个错误,因为
!preg_match('/^[a-z]*$/i',$value)
应该同时允许小写和大写字符吗

另外,我得到的错误似乎只是触发名字,而不是姓氏

<?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;
            }         
        }
}
?>

您的“或”状态缺少括号。“AND”优先于“OR”

注意:在上面的代码中,有一个“未定义变量”:
$error

我建议:

  • 您可以使用:
    在_数组($key、['firstname'、'lastname'])
    而不是两个单独的检查,使您的条件语句更直接/简短/干练

  • 当有一个非正则表达式函数设计用于执行相同任务时,可以避免不必要地使用正则表达式函数:
    !ctype_alpha($value)

  • 这就是实现的样子:()

    输出:

    array (
      0 => 'lastname field contains invalid value: n0tl3g!t',
    )
    

    至于改进应用程序的用户体验,我建议在表单中使用HTML5验证,以防止提交无效字段值,例如

    <input type="text" name="firstname" required pattern="[a-zA-Z]+" placeholder="letters only">
    
    
    
    请发布html,这是错误的条件逻辑。在or子句周围加上()
    array (
      0 => 'lastname field contains invalid value: n0tl3g!t',
    )
    
    <input type="text" name="firstname" required pattern="[a-zA-Z]+" placeholder="letters only">