php为用户标识和密码添加特殊字符



我想防止新用户在他们的用户名和密码中包含撇号、引号和其他特殊字符,因为我发现这些可能会在以后产生意想不到的问题。与其预测这些问题中的每一个,我宁愿从一开始就禁止用户在注册时包含这些字符。

网络上有很多关于如何逃离它们并将其放入数据库的问题,但这不是问题所在。我只是想抛出一个错误消息,说输入一些不同的东西。

我试过:

$username = $_POST['username'];
if (preg_match ("/[&<>%*,.'"]/i", $uid)) {
$strError="Your userid may not contain a special character.  Please try again.";
}

但这引发了一个错误:未找到结束分隔符CCD_ 1。

如有任何建议,不胜感激。

谢谢。

我认为你的做法不对。不要将特殊字符列入黑名单,而是尝试将字母和数字列入白名单,例如

$username = $_POST['username'];
if (!preg_match('/^[wd]$/', $uid)) {
    $strError="Your userid may not contain a special character.  Please try again.";
}

包括星号和分号:

$username = $_POST['username'];
if (!preg_match('/^[wd*;]$/', $uid)) {
    $strError="Your userid may not contain a special character.  Please try again.";
}

简化它。。。

<?php
  $username = $_POST["username"];
  if ( preg_match( "/^[A-Za-z0-9_]{3,20}$/", $username ) ) {
    // username is valid
  }
  else {
    // it contains special chars
  }
?>

解释regex。。。

"/^[
A-Z # any uppercase letters
a-z # any lowercase letters
0-9 # any digits
_ # underscore
]{3,20} # minimum 3 and maximum 20 characters
$/x"

语法高亮显示您的明显错误:这一行上有一个额外的'

$username = $_POSt['username']';

应该是

$username = $_POST['username'];
if (preg_match('/[^a-zA-Z]+/', $your_string, $matches))
{
  echo 'Your userid may not contain a special character.  Please try again.';
}
else
{
  // No special characters found
}

我可以建议您不要对preg_match执行此操作吗?

php有更好的"清理"字符串的功能,例如filter_var-检查filter_SANITIZE_STRING我建议这个片段

$usernameRaw = trim($_POST['username']);
$username = filter_var( $usernameRaw , FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);

最新更新