使用 preg_match 检查多个 $_POST
Check multiple $_POST with preg_match
关于检查我的多个输入(用户名、密码和验证码)preg_match
函数的正确格式的小问题
基本上代码适用于所有三个输入,但我不确定 "correct" 使用 ist 的方式。我只想知道 ,$var1 or $var2 or $var3
或 ,$var1 ,$var2 ,$var3
之间是否存在差异
它适用于两种代码,所以我有点困惑,如果一个是 "better" 或者这无关紧要。或者一个是更"cleaner"的版本。
if(isset($_GET['login'])) {
if(!preg_match("/^[a-zA-Z._ ]{1,12}$/",$_POST['username'] ,$_POST['password'] ,$_POST['captcha_code'])) {
die();
}
另一个工作代码是:
if(isset($_GET['login'])) {
if(!preg_match("/^[a-zA-Z._ ]{1,12}$/",$_POST['username'] or $_POST['password'] or $_POST['captcha_code'])) {
die();
}
嗯,$var1 or $var2 or $var3
显然是完全错误的。您不能 or
字符串并期望得到不错的结果。在大多数情况下,结果将是 true
,这不是您想要的。
这让我怀疑你的说法:"Its working with both codes"。
是的,如果我查看 preg_match 的手册,很明显它不接受用逗号分隔的多个主题。
所以两个版本都不工作。
最重要的是一个更普遍的问题。您正在尝试使用 preg_match()
将变量的可能内容限制在 "a-zA-Z._"
中的 1 到 12 个字符之间。那是非常有限制的。像这样限制用户名和密码被认为是不好的做法。
你也只是 die();
当没有找到模式匹配时,这对用户来说不是很有用。
所以"cleaner"版本是省去了这段代码。
抱歉,我不能更积极...也许提示会有所帮助?
看看filter_input(),这是我现在用来过滤输入的。
要用一种模式匹配三个字符串,您可以试试这段代码。
$pattern = "/^[a-zA-Z._ ]{1,12}$/";
if(!preg_match($pattern, $_POST['username'])
or !preg_match($pattern, $_POST['password'])
or !preg_match($pattern, $_POST['captcha_code'])) {
die();
}
另一种方法是使用 foreach
循环:
foreach ( ['username','password','captcha_code'] as $key ) {
if ( !preg_match("/^[a-zA-Z._ ]{1,12}$/", $_POST[$key]) ) {
die();
}
}
关于检查我的多个输入(用户名、密码和验证码)preg_match
函数的正确格式的小问题
基本上代码适用于所有三个输入,但我不确定 "correct" 使用 ist 的方式。我只想知道 ,$var1 or $var2 or $var3
或 ,$var1 ,$var2 ,$var3
它适用于两种代码,所以我有点困惑,如果一个是 "better" 或者这无关紧要。或者一个是更"cleaner"的版本。
if(isset($_GET['login'])) {
if(!preg_match("/^[a-zA-Z._ ]{1,12}$/",$_POST['username'] ,$_POST['password'] ,$_POST['captcha_code'])) {
die();
}
另一个工作代码是:
if(isset($_GET['login'])) {
if(!preg_match("/^[a-zA-Z._ ]{1,12}$/",$_POST['username'] or $_POST['password'] or $_POST['captcha_code'])) {
die();
}
嗯,$var1 or $var2 or $var3
显然是完全错误的。您不能 or
字符串并期望得到不错的结果。在大多数情况下,结果将是 true
,这不是您想要的。
这让我怀疑你的说法:"Its working with both codes"。
是的,如果我查看 preg_match 的手册,很明显它不接受用逗号分隔的多个主题。
所以两个版本都不工作。
最重要的是一个更普遍的问题。您正在尝试使用 preg_match()
将变量的可能内容限制在 "a-zA-Z._"
中的 1 到 12 个字符之间。那是非常有限制的。像这样限制用户名和密码被认为是不好的做法。
你也只是 die();
当没有找到模式匹配时,这对用户来说不是很有用。
所以"cleaner"版本是省去了这段代码。
抱歉,我不能更积极...也许提示会有所帮助?
看看filter_input(),这是我现在用来过滤输入的。
要用一种模式匹配三个字符串,您可以试试这段代码。
$pattern = "/^[a-zA-Z._ ]{1,12}$/";
if(!preg_match($pattern, $_POST['username'])
or !preg_match($pattern, $_POST['password'])
or !preg_match($pattern, $_POST['captcha_code'])) {
die();
}
另一种方法是使用 foreach
循环:
foreach ( ['username','password','captcha_code'] as $key ) {
if ( !preg_match("/^[a-zA-Z._ ]{1,12}$/", $_POST[$key]) ) {
die();
}
}