php Mac地址检查格式

Bor*_*rsn 0 php

我从 url 获取用户的 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();} }
Run Code Online (Sandbox Code Playgroud)

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

j0k*_*j0k 5

自 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)
Run Code Online (Sandbox Code Playgroud)

所以你可以这样做:

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