为了账号安全,请及时绑定邮箱和手机立即绑定

使用 preg_match 检查多个 $_POST

使用 preg_match 检查多个 $_POST

PHP
喵喔喔 2021-09-18 10:48:24
只是一个关于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 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

嗯,这$var1 or $var2 or $var3显然是完全错误的。你不能or串起来并期望一个不错的结果。在大多数情况下,结果将是true,这不是您想要的。

这让我怀疑你的说法:“它可以使用两种代码”。

是的,如果我查看preg_match手册,很明显它不接受以逗号分隔的多个主题。

所以这两个版本都不起作用

除此之外,还有一个更普遍的问题。您正在尝试使用preg_match()将变量的可能内容限制在 1 到 12 个字符之间"a-zA-Z._"。这是非常严格的。像这样限制用户名和密码被认为是不好的做法

您也只是die();在找到不匹配的模式时,这对用户来说信息量不大。

所以“更干净”的版本是省略了这段代码。

对不起,我不能更积极...也许提示会有所帮助?

看看filter_input(),它是我现在用来过滤输入的东西。


查看完整回答
反对 回复 2021-09-18
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

另一种方法是使用foreach循环:


foreach ( ['username','password','captcha_code'] as $key ) {

    if ( !preg_match("/^[a-zA-Z._ ]{1,12}$/", $_POST[$key]) ) {

        die();

    }

}


查看完整回答
反对 回复 2021-09-18
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

要将三个字符串与一个模式匹配,您可以尝试使用此代码。


$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();


查看完整回答
反对 回复 2021-09-18
  • 3 回答
  • 0 关注
  • 341 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信