注册脚本的预匹配 php
preg match for registration script php
我正在尝试进行一些预匹配以使我的脚本更安全,但是无论我输入什么 username/realname 我都会收到错误...我哪里出错了?
$unpreg = $_POST["username"];
$empreg = $_POST["email"];
$rnpreg = $_POST["realname"];
$error = false;
if(preg_match("/[^\p{L}\p{N}_\-\.]+/iu','",$unpreg) || (filter_var($empreg, FILTER_SANITIZE_EMAIL)) || (preg_match("/[^\p{L}\s]+/u",$rnpreg))) {
$error = true;
}
if(!$error) {
$sql = "INSERT INTO Users (UserName, Email, Password,Real_Name) VALUES (:username, :email, :password, :realname)";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':username',$unpreg);
$stmt->bindParam(':realname',$rnpreg);
$stmt->bindParam(':email', $empreg);
$stmt->bindParam(':password', password_hash($_POST['password'], PASSWORD_BCRYPT));
$stmt->execute();
$message = 'Successfully created new user';
}
else {
$message = 'Error, Something went wrong.';
}
基本上对于 unpreg 我想允许 a-ö 0-9 -_ 并且对于 rnpreg a-ö - 和 space
编辑:如果我删除 (filter_var($empreg, FILTER_SANITIZE_EMAIL))
它会起作用...我如何在不破坏它的情况下实现它?
第一个正则表达式中的 ','
是一个错误,必须删除。然后,您需要使用 FILTER_SANITIZE_EMAIL
而您需要 FILTER_VALIDATE_EMAIL
来 验证 电子邮件。并且您需要否定 filter_var
,因为您遵循 if
中的否定逻辑。
使用
if(preg_match("/[^\p{L}\p{N}_.-]+/iu",$unpreg) || !filter_var($empreg, FILTER_VALIDATE_EMAIL) || preg_match("/[^\p{L}\s]+/u",$rnpreg))
因此,如果找到 [^\p{L}\p{N}_.-]+
模式、电子邮件无效或匹配 [^\p{L}\s]+
模式,将返回错误。
我正在尝试进行一些预匹配以使我的脚本更安全,但是无论我输入什么 username/realname 我都会收到错误...我哪里出错了?
$unpreg = $_POST["username"];
$empreg = $_POST["email"];
$rnpreg = $_POST["realname"];
$error = false;
if(preg_match("/[^\p{L}\p{N}_\-\.]+/iu','",$unpreg) || (filter_var($empreg, FILTER_SANITIZE_EMAIL)) || (preg_match("/[^\p{L}\s]+/u",$rnpreg))) {
$error = true;
}
if(!$error) {
$sql = "INSERT INTO Users (UserName, Email, Password,Real_Name) VALUES (:username, :email, :password, :realname)";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':username',$unpreg);
$stmt->bindParam(':realname',$rnpreg);
$stmt->bindParam(':email', $empreg);
$stmt->bindParam(':password', password_hash($_POST['password'], PASSWORD_BCRYPT));
$stmt->execute();
$message = 'Successfully created new user';
}
else {
$message = 'Error, Something went wrong.';
}
基本上对于 unpreg 我想允许 a-ö 0-9 -_ 并且对于 rnpreg a-ö - 和 space
编辑:如果我删除 (filter_var($empreg, FILTER_SANITIZE_EMAIL))
它会起作用...我如何在不破坏它的情况下实现它?
第一个正则表达式中的 ','
是一个错误,必须删除。然后,您需要使用 FILTER_SANITIZE_EMAIL
而您需要 FILTER_VALIDATE_EMAIL
来 验证 电子邮件。并且您需要否定 filter_var
,因为您遵循 if
中的否定逻辑。
使用
if(preg_match("/[^\p{L}\p{N}_.-]+/iu",$unpreg) || !filter_var($empreg, FILTER_VALIDATE_EMAIL) || preg_match("/[^\p{L}\s]+/u",$rnpreg))
因此,如果找到 [^\p{L}\p{N}_.-]+
模式、电子邮件无效或匹配 [^\p{L}\s]+
模式,将返回错误。