【问题标题】:Alphanumeric pattern php with preg_match带有 preg_match 的字母数字模式 php
【发布时间】:2014-06-15 16:31:57
【问题描述】:

有人可以向我解释为什么这种模式被识别为字母数字吗?

\13\13\13\13\13\13\13\13\13234234\3

请在此链接查看图片enter link description here

我编写代码只是为了向您表明它被识别为字母数字

编辑 15.06.214 21:40

我添加了一些信息,对不起,我忘记了。

您看到的变量取自输入表单。这就是我使用的代码,目的是使信息干净并准备好插入数据库。

PS:仅供参考,变量 $errform 稍后用于“触发”页面上的错误消息

    <?php
  $username = $password = $fname = $lname = $mail = $id_dept = "";
  $usernameERR = $passwordERR = $fnameERR = $lnameERR = $id_deptERR = "";
  $errform = 2;
?>
<?php
  if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $username = clean_data($_POST["username"]);
    $password = clean_data($_POST["password"]);
    $fname = clean_data($_POST["fname"]);
    $lname = clean_data($_POST["lname"]);
    $mail = clean_data($_POST["mail"]);
    $id_dept = clean_data($_POST["id_dept"]);
    if (!preg_match("/^[a-zA-Z0-9]*$/", $username)) {
        $usernameERR = "Only letters and numbers allowed";
      }
    if (!preg_match("/^[a-zA-Z0-9]*$/", $password)) {
        $passwordERR = "Only letters and numbers allowed";
      }
    if (!preg_match("/^[a-zA-Z ]*$/", $fname)) {
        $fnameERR = "Only letters and white space allowed";
      }
    if (!preg_match("/^[a-zA-Z ]*$/", $lname)) {
        $lnameERR = "Only letters and white space allowed";
      }
  }
  function clean_data($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
  }
  if (isset($_POST['submit'])) {
    if ((!preg_match("/^[a-zA-Z0-9]*$/", $username))
    || (!preg_match("/^[a-zA-Z0-9]*$/", $password))
    || (!preg_match("/^[a-zA-Z ]*$/", $fname))
    || (!preg_match("/^[a-zA-Z ]*$/", $lname))) {
      $errform = 1;
    } else {
      $errform = 0;
      $con = mysqli_connect($hostdb,$userdb,$passwdb,$dbTEST);
      if (mysqli_connect_errno()) {
        echo "Impossibile connettersi a MySQL: " . mysqli_connect_error();
      }
      $username = mysqli_real_escape_string($con, $_POST['username']);
      $password = md5(mysqli_real_escape_string($con, $_POST['password']));
      $fname = mysqli_real_escape_string($con, $_POST['fname']);
      $lname = mysqli_real_escape_string($con, $_POST['lname']);
      $mail = mysqli_real_escape_string($con, $_POST['mail']);
      $id_dept = mysqli_real_escape_string($con, $_POST['id_dept']);
      if (!mysqli_query($con, "INSERT INTO user (id_user, username, password, fname, lname, mail, id_dept) VALUES (NULL, '$username', '$password', '$fname', '$lname', '$mail', '$id_dept')")) {
        die ("Error: " . mysqli_error($con));
      }
      mysqli_close($con);
    }
  }
?>

编辑 15/06/2014 22:41

好的,

对不起大家,我了解问题的根源。

我检查的是

(preg_match("/^[a-zA-Z0-9]*$/", $username))

在我的代码中,$username 得到了这种处理

    $username = clean_data($_POST["username"]);
    if (!preg_match("/^[a-zA-Z0-9]*$/", $username)) {
        $usernameERR = "Only letters and numbers allowed";
      }

在哪里

    function clean_data($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
  }

所以当我发布 \q\q\q\q\q\q\q\q\q 这被剥离并成为 qqqqqqqqq

但是,有两个问题。第一个问题是我在附和这个

echo "post username: " . $_POST["username"];

和这个比较

echo "preg username " . preg_match("/^[a-zA-Z0-9]*$/", $username);

很明显 $_POST["username"] 不是 == 到 $username 因为最后一个得到了 clead_data 函数的处理,而 POST 没有。

所以当我在做 preg_match 时,我在做 $username = qqqqqqqqqqq(这是字母数字),而我给你看的是 $_POST['username'] = \q\q\q\q\q\q \q\q\q\q\q

第二个问题是我将这个发送到数据库

$username = mysqli_real_escape_string($con, $_POST['username']);

虽然我应该发送这个

$username = mysqli_real_escape_string($con, $username);

所以在数据库中到达了 NON CLEANED 数据。

【问题讨论】:

  • 请编辑问题以包含相关代码和输出,并使其更好地描述情况。现在即使是截图也不清楚,而且使用截图来转储这样的信息无论如何都是不受欢迎的。

标签: php preg-match alphanumeric


【解决方案1】:

因为如果它包含 A-Z 或 a-z 或 0-9 个字符,并且此字符串包含 13...,这是您允许的,这是 RegExp 中允许的字符。(/^[a-zA-Z0-9]+&amp;/)

您可以通过以下模式解决它:

用户名:

/^[a-zA-Z]+[0-9_]*?[a-zA-Z]*?&amp;/

姓名:

/^[a-zA-Z]+[ ]*?[a-zA-Z]&amp;/

【讨论】:

    【解决方案2】:

    我认为您的反斜杠被忽略了,因为它们不被视为文字反斜杠,而是像转义以下字符的反斜杠。由于转义字符对于 php 字符串没有特殊含义,因此简单地忽略反斜杠。要获得预期的行为,您可以在执行测试之前使用addslashes

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-08
      • 1970-01-01
      • 2011-10-21
      • 2011-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多