php Mac地址检查格式
我正在从url获取用户的mac。我想做的是匹配看看地址是否真实。因为我将在数据库上运行它,如果格式不正确,我不想运行它 这就是我到目前为止所做的:php Mac地址检查格式,php,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 (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 u filtered),因为它返回
else
删除这一行。它没有任何用处:
$get_mac_filtered = preg_replace('/^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$/', '',$_GET['mac']);
如前所述,这会将任何类似于有效MAC地址的内容替换为…无。这几乎肯定不是你想在这里做的
相反,在下一行,将
preg_match()
的结果与1进行比较。(如果正则表达式匹配,则返回1;如果不匹配,则返回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。)自PHP5.5以来,验证MAC地址的最佳方法是使用带有常量的filter\u validate\u MAC
:
var_dump(filter_var('FA-F9-DD-B2-5E-0D',filter_VALIDATE_MAC));
//串(17)“FA-F9-DD-B2-5E-0D”
变量转储(过滤器变量('DC:BB:17:9A:CE:81',过滤器验证\U MAC));
//字符串(17)“DC:BB:17:9A:CE:81”
变量转储(过滤器变量('96-D5-9E-67-40-AB',过滤器验证MAC));
//管柱(17)“96-D5-9E-67-40-AB”
变量转储(过滤器变量('96-D5-9E-67-40',过滤器验证MAC));
//布尔(假)
变量转储(过滤器变量(“”,过滤器验证MAC));
//布尔(假)
所以你可以做:
if(false==filter\u var($\u GET['mac'],filter\u VALIDATE\u mac)){
抛出新\异常(“无效mac地址”);
}
自PHP5.5以来,验证MAC地址的最佳方法是使用filter\u var
和常量filter\u validate\u MAC
:
var_dump(filter_var('FA-F9-DD-B2-5E-0D',filter_VALIDATE_MAC));
//串(17)“FA-F9-DD-B2-5E-0D”
变量转储(过滤器变量('DC:BB:17:9A:CE:81',过滤器验证\U MAC));
//字符串(17)“DC:BB:17:9A:CE:81”
变量转储(过滤器变量('96-D5-9E-67-40-AB',过滤器验证MAC));
//管柱(17)“96-D5-9E-67-40-AB”
变量转储(过滤器变量('96-D5-9E-67-40',过滤器验证MAC));
//布尔(假)
变量转储(过滤器变量(“”,过滤器验证MAC));
//布尔(假)
所以你可以做:
if(false==filter\u var($\u GET['mac'],filter\u VALIDATE\u mac)){
抛出新\异常(“无效mac地址”);
}
如果您正在检查与DB的匹配,如果格式不正确,是否会返回false
?上面的代码有什么问题?会的。但是在我得到正确的格式之前,我不想打扰数据库@OliverCharlesworth@andrewsi我猜它就在这里的某个地方(preg_match('/^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$/',$\u GET['mac'])==$GET_mac filter)因为它返回的是其他的。如果你仍然要检查与数据库的匹配,如果格式不正确,不会返回false
吗?上面的代码有什么问题吗?会的。但是在我得到正确的格式之前,我不想打扰数据库@OliverCharlesworth@andrewsi我猜它在这里的某个地方(preg_match('/^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$/',$\u GET['mac'])==$GET_mac filtered)
因为它会返回其他内容。直接在数据库中使用&GET
不是很危险吗?如果我使用这样的$GET\u mac\u filtered=preg\u replace('/[^a-fA-F0-9]/','',$GET['mac'])
它从地址中删除:
。@Borsn?如果您遵循最佳实践并使用参数化查询,则不会。在任何情况下,正则表达式都会拒绝任何不需要的内容。直接在数据库中使用&u GET
不是很危险吗?如果我使用类似这样的$GET\u mac\u filtered=preg\u replace('/[^a-fA-F0-9]/','',$u GET['mac'])
它从地址中删除:
。@Borsn?如果您遵循最佳实践并使用参数化查询,则不会。在任何情况下,正则表达式都会拒绝任何不需要的内容。