我想防止新用户在他们的用户名和密码中包含撇号、引号和其他特殊字符,因为我发现这些可能会在以后产生意想不到的问题。与其预测这些问题中的每一个,我宁愿从一开始就禁止用户在注册时包含这些字符。
网络上有很多关于如何逃离它们并将其放入数据库的问题,但这不是问题所在。我只是想抛出一个错误消息,说输入一些不同的东西。
我试过:
$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);