使用 preg_match 检查多个 $_POST

只是一个关于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();

        } 


喵喔喔
浏览 342回答 3
3回答

繁星点点滴滴

嗯,这$var1 or $var2 or $var3显然是完全错误的。你不能or串起来并期望一个不错的结果。在大多数情况下,结果将是true,这不是您想要的。这让我怀疑你的说法:“它可以使用两种代码”。是的,如果我查看preg_match手册,很明显它不接受以逗号分隔的多个主题。所以这两个版本都不起作用。除此之外,还有一个更普遍的问题。您正在尝试使用preg_match()将变量的可能内容限制在 1 到 12 个字符之间"a-zA-Z._"。这是非常严格的。像这样限制用户名和密码被认为是不好的做法。您也只是die();在找到不匹配的模式时,这对用户来说信息量不大。所以“更干净”的版本是省略了这段代码。对不起,我不能更积极...也许提示会有所帮助?看看filter_input(),它是我现在用来过滤输入的东西。

神不在的星期二

另一种方法是使用foreach循环:foreach ( ['username','password','captcha_code'] as $key ) {    if ( !preg_match("/^[a-zA-Z._ ]{1,12}$/", $_POST[$key]) ) {        die();    }}

犯罪嫌疑人X

要将三个字符串与一个模式匹配,您可以尝试使用此代码。$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();} 
打开App,查看更多内容
随时随地看视频慕课网APP