我从网址获取用户的mac。我想要做的就是匹配,看看地址是否真实。因为我会针对数据库运行它,如果格式不正确,我也不想运行它。
这是我到目前为止所做的:
(preg_match('/^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$/', $_GET['mac']) == $get_mac_filtered)
我猜这个问题在else
的某处,因为它返回textView
答案 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.)