首页 > 解决方案 > 表单特殊字符验证

问题描述

我想验证用户的输入,因此只允许使用字母/数字和空格。我在谷歌上找到了一些例子,这就是我从中做出的。对我来说,这段代码是逻辑的,应该可以工作,但是每当我在表单中输入一个特殊字符,然后按下提交按钮时,它就不会显示错误。

有谁知道我在这里错过了什么或我做错了什么?

<?php
$Input1 = "";
$Input1Err = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if(empty($_POST["Input1"])){
    $Input1Err = "Enter something.";
  }else{
    $Input1 = test_input($_POST["Input1"]);
    if(!preg_match("/[^a-z0-9 _]+$/i", $Input1)){
      $Input1Err = "Only letters and space is allowed.";
    }
  }

function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}
?>

这是我使用的 html 代码:

<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="POST">
<p>Enter your name <input type="text" required name="Input1" placeholder="Enter here.."></p> 
        <span class="error">*<?php echo $Input1Err;?></span>

标签: phphtml

解决方案


正则表达式只允许字母数字和空格 ^[a-z0-9 .\-]+$

if else 条件中还缺少一个右括号

  $Input1 = "";
  $Input1Err = "";

  if ($_SERVER["REQUEST_METHOD"] == "POST") 
  {
      if(empty($_POST["Input1"]))
      {
        $Input1Err = "Enter something.";
      }
      else
      {
        $Input1 = test_input($_POST["Input1"]);
        if(!preg_match('/^[a-z0-9 .\-]+$/i', $Input1))
        {
          $Input1Err = "Only letters and space is allowed.";
        }
      }
}

推荐阅读