php Mac地址检查格式

时间:2016-03-06 23:45:22

标签: php

我从网址获取用户的mac。我想要做的就是匹配,看看地址是否真实。因为我会针对数据库运行它,如果格式不正确,我也不想运行它。

这是我到目前为止所做的:

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

我猜这个问题在else的某处,因为它返回textView

2 个答案:

答案 0 :(得分:1)

从PHP 5.5开始可用,验证MAC地址的最佳方法是使用filter_var和常数FILTER_VALIDATE_MAC

var_dump(filter_var('FA-F9-DD-B2-5E-0D', FILTER_VALIDATE_MAC));
// string(17) "FA-F9-DD-B2-5E-0D"

var_dump(filter_var('DC:BB:17:9A:CE:81', FILTER_VALIDATE_MAC));
// string(17) "DC:BB:17:9A:CE:81"

var_dump(filter_var('96-D5-9E-67-40-AB', FILTER_VALIDATE_MAC));
// string(17) "96-D5-9E-67-40-AB"

var_dump(filter_var('96-D5-9E-67-40', FILTER_VALIDATE_MAC));
// bool(false)

var_dump(filter_var('', FILTER_VALIDATE_MAC));
// bool(false)

所以您可以这样做:

if (false === filter_var($_GET['mac'], FILTER_VALIDATE_MAC)) {
    throw new \Exception('Invalid mac address');
}

答案 1 :(得分:0)

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

template <class F, class R = decltype(std::declval<F>()())>
R call_declval(F& f) { return f(); }

如上所述,这将取代任何类似于有效MAC地址的内容......没有。这几乎肯定不是你想要做的。

相反,在下一行,将$get_mac_filtered = preg_replace('/^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$/', '',$_GET['mac']); 的结果与1进行比较。(如果正则表达式匹配则返回1,如果不匹配,则返回0.)