关于用于检查我的多个输入(用户名,密码和验证码)的preg_match
函数的正确格式,这只是一个小问题
基本上,该代码可用于所有三个输入,但是我不确定使用ist的“正确”方式。我只想知道,$var1 or $var2 or $var3
或,$var1 ,$var2 ,$var3
它可以同时使用两种代码,因此如果一个代码“更好”还是无关紧要,我会感到困惑。或者是更“干净”的版本。
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();
}
答案 0 :(得分:0)
好吧,$var1 or $var2 or $var3
显然是完全错误的。您不能or
字符串并且不能得到令人满意的结果。在大多数情况下,结果将是true
,这不是您想要的。
这使我怀疑您的说法:“它同时适用于两种代码”。
是的,如果我查看preg_match的手册,很明显它不接受多个用逗号分隔的主题。
因此,两个版本不起作用。
最重要的是一个更普遍的问题。您正在尝试使用preg_match()
将变量的可能内容限制为"a-zA-Z._"
中的1到12个字符。这是非常严格的。限制这样的用户名和密码被认为是“不道德的做法”。
当没有找到模式匹配项时,您也只是die();
,这对用户不是很有帮助。
因此,“更干净”的版本将省略此代码。
对不起,我不能再保持积极态度……也许提示会有所帮助?
看看filter_input(),这是我如今用来过滤输入的内容。
答案 1 :(得分:0)
要将三个字符串与一个模式匹配,可以尝试以下代码。
$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();
}
答案 2 :(得分:0)
另一种方法是使用foreach
循环:
foreach ( ['username','password','captcha_code'] as $key ) {
if ( !preg_match("/^[a-zA-Z._ ]{1,12}$/", $_POST[$key]) ) {
die();
}
}