Tampermonkey实现MAC地址自动格式化脚本失效求助
MAC地址自动格式化脚本问题分析与修复
嘿,我来帮你捋捋这个脚本为啥不好使,以及怎么修复它~
原脚本的核心问题
你的初始脚本没法正常工作,主要踩了这几个坑:
- 数组处理翻车:最后用
macs.toString()会把数组元素用逗号连起来,比如处理后的内容会变成"00,:,00,:,...",完全不是我们要的MAC格式。 - 逻辑判断混乱:多个
else if的顺序和逻辑有问题,比如else if (macs[col] != "")会把后续的判断都拦住,导致添加冒号的逻辑根本跑不起来。 - 没考虑删除操作:用户按删除/退格键的时候,脚本还是会瞎加冒号,格式直接乱掉。
- 没校验输入合法性:不管输入的是不是十六进制字符,都往里面塞,很容易出问题。
修正后的解决方案
结合@freginold的方案微调后的脚本就能正常工作啦,完整代码和逻辑说明如下:
var back = true; function isHex(char) { // 检查字符是不是十六进制合法字符(0-9、a-f、A-F) if (!isNaN(parseInt(char))) { return true; } else { switch (char.toLowerCase()) { case "a": case "b": case "c": case "d": case "e": case "f": return true; } return false; } } // 监听按键按下,判断是不是删除/退格键,避免删除时乱加冒号 document.getElementById("MAC").addEventListener('keydown', function() { var key = event.keyCode || event.charCode; if( key == 8 || key == 46 ) { back = false; } }); // 监听按键抬起,处理MAC地址的自动格式化 document.getElementById("MAC").addEventListener('keyup', function() { var key = event.keyCode || event.charCode; var mac = document.getElementById('MAC').value; var newMac = mac.replace("-", ""); // 把输入里的短横线去掉,统一用冒号分隔 // 只有满足这些条件才加冒号:最后两个字符都是合法十六进制、总长度没超过16(12个字符+4个冒号)、不是删除操作 if ((isHex(mac[mac.length - 1]) && (isHex(mac[mac.length - 2])) && (mac.length <= 16) && (back))) { newMac = newMac + ":"; } back = true; document.getElementById('MAC').value = newMac; // 更新输入框的内容 });
代码逻辑拆解
isHex函数:专门把关输入的字符,确保只有十六进制的合法字符才会被处理,避免乱码。keydown监听:记住用户是不是在删字符,这样删除的时候就不会硬加冒号,体验更顺畅。keyup处理逻辑:- 先统一清理掉输入里的短横线,保证格式一致。
- 当连续输入2个合法字符、总长度没超标,且不是删除操作时,自动插入冒号。
- 最后把处理好的内容放回输入框,完美实现自动格式化。
这样修改后,脚本就能稳稳地帮你在输入MAC地址时自动补全冒号啦~
内容的提问来源于stack exchange,提问作者Hitmare Chelien
相关产品推荐
相关产品推荐

