Php 使用正则表达式验证用户输入

Php 使用正则表达式验证用户输入,php,regex,Php,Regex,我希望实现正则表达式作为检查用户输入的一种方法,在阅读本文之后,我想到了下面的代码。当我运行脚本并输入名字和姓氏的数字时,不管我的正则表达式是什么,它们都会成功发布。我在想我可能做错了什么 <?php $errors = array(); // ....create database connection.....// if (isset($_POST['insert'])) { $last_name = trim($_POST['last_name']); $first_name =

我希望实现正则表达式作为检查用户输入的一种方法,在阅读本文之后,我想到了下面的代码。当我运行脚本并输入名字和姓氏的数字时,不管我的正则表达式是什么,它们都会成功发布。我在想我可能做错了什么

<?php
$errors = array();
// ....create database connection.....//
if (isset($_POST['insert'])) {

$last_name = trim($_POST['last_name']);
$first_name = trim($_POST['first_name']);
$age = trim($_POST['age']);

// ....My regular expressions.....//
 if(isset($_POST['last_name'])){
 if(preg_match("/^[A-Z][a-zA-Z -]+$/", $_POST['last_name']) === 0) {
  $errors[] = 'lastname should not contain spaces.'; }
  }

if(isset($_POST['first_name'])){
if(preg_match("/^[A-Z][a-zA-Z -]+$/", $_POST['first_name']) === 0) {
  $errors[] = 'firstname should not contain spaces.';} 
}
  $OK = false;
   $stmt = $conn->stmt_init();
  $sql = 'INSERT INTO voter_tracking (
        v_id,
        last_name,
        first_name,)
    VALUES(?, ?,?)';
  if ($stmt->prepare($sql)) {
     $stmt->bind_param('iss', $_POST['v_id'], $_POST['last_name'],        $_POST['first_name']);
$stmt->execute();
if ($stmt->affected_rows > 0) {
  $OK = true;
}
       // redirect if successful or display error
       if ($OK) {
    echo 'posted';
    exit;
   } else {
    $error = $stmt->error;
   }}}
 ?>
<!DOCTYPE html>
 <html>
<head>
 <meta charset="utf-8">
 <title>Home</title>
 </head>

 <body>
<div id="main">
    <fieldset>
            <legend><h2>Add New Voter Record:</h2></legend>
            <?php if (isset($error)) {
              echo "<p class=\"warning\">Error: $error</p>";
            } ?>
            <form id="form1" method="post" action="">             
          <p>
            <label for="last_name">Last Name:</label>
            <input type="text" name="last_name" class="widebox" id="name" required aria-required="true">
          </p>
          <p>
            <label for="first_name">First Name:</label>
            <input type="text" name="first_name" class="widebox" id="first_name" required aria-required="true">
          </p>

          <p>
            <input type="submit" name="insert" value="Insert New Entry" id="insert">
          </p>

        </form>
        </fieldset>          
</div>
</body>
</html>

你的正则表达式看起来不错

您的问题是在发布/插入数据库之前需要检查错误。。大概是这样的:

if (count($errors) > 0) {
   // prepare and execute sql insert here.
}

我的第一个问题:你知道正则表达式是做什么的吗?你能读懂吗?你能坚持吗?这个问题似乎离题了,因为开场白必须展示出对要解决的问题的最低限度的理解。他只是抄了那个密码,但看不懂。我的建议是:使用初学者可以理解的简单方法,最好是字符串函数。如果你不知道如何处理正则表达式,给你任何建议都是毫无意义的。每个有经验的RegExer都会看到错误,但如果你自己看不到,你永远也学不到。@hek2mgl,这个关闭原因已从关闭原因列表中删除。我想,现在在“其他”部分添加它并不是我们所期望的。@stema Oh!我不知道,thx@YU不工作,@MElliott谢谢,这是我对regex实现逻辑理解中缺少的一个环节,我实现了这个ifempty$reg_errors{//prepare and execute sql insert here.}以在发布之前检查错误,我的验证系统正按预期工作。@MichelMzer-太棒了!很高兴我能帮忙!如果您认为这是答案或有助于解决您的问题,请接受作为答案或投票,或两者兼而有之,谢谢