使用preg_match检查多个$ _POST

时间:2019-06-29 07:31:14

标签: php post preg-match

关于用于检查我的多个输入(用户名,密码和验证码)的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();
        } 

3 个答案:

答案 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();
    }
}