2016-03-06 91 views
-1

我从url获取用户的mac。我想要做的是匹配,看看地址是否真实。因为我将针对数据库运行它,如果格式不正确,我不想运行它。php Mac地址检查格式

这是我到目前为止有:

if (isset($_GET['mac'])) { 
    if (strlen($_GET['mac']) == 18) { 
     $get_mac_filtered = preg_replace('/^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$/', '',$_GET['mac']); 
      if (preg_match('/^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$/', $_GET['mac']) == $get_mac_filtered) { 
       echo 'Got a mac match! '.$get_mac_filtered; 
      }else { 
       echo 'Sorry !='; 
      } 
}else {die();} } 

我猜问题是在某处这里(preg_match('/^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$/', $_GET['mac']) == $get_mac_filtered),因为它返回else

+0

如果你正在检查对DB比赛无论如何,如果格式不正确,不会返回“false”吗? –

+0

上述代码有什么问题? – andrewsi

+0

它会。但我宁愿不打扰数据库,直到我得到了格式右@OliverCharlesworth – Borsn

回答

0

删除此行。它没有任何用处:

$get_mac_filtered = preg_replace('/^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$/', '',$_GET['mac']); 

正如所写,这代替了任何类似于有效MAC地址的东西......没有任何东西。这几乎不是你想要在这里做的。

相反,在下一行中,preg_match()比较结果为1(如果正则表达式匹配,则返回1和0,如果它没有。)

+0

直接在数据库中使用'&_GET'并不危险吗? – Borsn

+0

如果我使用这样的'$ get_mac_filtered = preg_replace('/ [^ a-fA-F0-9] /','',$ _ GET ['mac']);'它从地址中删除':' 。 – Borsn

+1

@Borsn风险?如果您遵循最佳做法并使用参数化查询,则不适用。无论如何,正则表达式会拒绝任何不需要的东西。 – duskwuff