使用 HTML + JavaScript 实现进制转换工具(附源码地址)
<div class="input-group"> <label for="inputValue">输入数值</label> <input type="text" id="inputValue" placeholder="请输入要转换的数值"> <div class="error" id="errorMsg">输入的数值不符合当前进制规范</div></div>
<div class="row"> <div class="col"> <div class="input-group"> <label for="fromBase">源进制</label> <select id="fromBase"> <option value="2">二进制</option> <option value="8">八进制</option> <option value="10" selected>十进制</option> <option value="16">十六进制</option> </select> </div> </div> <div class="col"> <div class="input-group"> <label for="toBase">目标进制</label> <select id="toBase"> <option value="2">二进制</option> <option value="8">八进制</option> <option value="10">十进制</option> <option value="16" selected>十六进制</option> </select> </div> </div></div>
<div class="result-group"> <div class="result-item"> <div class="result-label">转换结果</div> <div class="result-value" id="resultValue">-</div> </div></div>
0 和 1;八进制允许 0-7;十进制允许 0-9;而十六进制则额外包含了 a-f(或 A-F)。validateInput 的工具函数。该函数接收当前的输入值 value 和源进制 base 作为参数。内部实现上,我们构建了一个映射对象 validChars,其键名为进制数,键值为对应的正则表达式。通过调用正则的 .test() 方法,我们可以快速返回布尔值来判断输入是否合规。function validateInput(value, base) { if (!value || value.trim() === '') { return false; } const validChars = { 2: /^[01]+$/, 8: /^[0-7]+$/, 10: /^[0-9]+$/, 16: /^[0-9a-fA-F]+$/ }; return validChars[base].test(value.trim());}
convert 函数中,我们首先获取输入框的值以及两个下拉菜单选中的进制值。利用 parseInt(value, from) 方法,可以将指定进制的字符串解析为十进制的 Number 类型。如果解析失败(例如输入了非法字符),该方法会返回 NaN。接着,我们调用十进制数值的 .toString(to) 方法,将其转换为目标进制的字符串表示形式。值得注意的是,十六进制的结果通常习惯使用大写字母(如 FF 而非 ff),因此我们在最后链式调用了 .toUpperCase() 方法进行格式化。function convert() { const value = inputValue.value.trim(); const from = parseInt(fromBase.value); const to = parseInt(toBase.value); if (!validateInput(value, from)) { errorMsg.classList.add('show'); resultValue.textContent = '-'; return; } errorMsg.classList.remove('show'); const decimalValue = parseInt(value, from); if (isNaN(decimalValue)) { errorMsg.classList.add('show'); resultValue.textContent = '-'; return; } resultValue.textContent = decimalValue.toString(to).toUpperCase();}
keypress 事件,当检测到用户按下回车键(Enter)时,直接调用 convert() 函数。其次,针对两个下拉选择器 fromBase 和 toBase,我们监听了它们的 change 事件。这意味着当用户改变了进制的设定,只要输入框内存在有效内容,程序就会立即根据新的进制规则重新执行转换逻辑。convertBtn.addEventListener('click', convert);inputValue.addEventListener('keypress', function(e) { if (e.key === 'Enter') { convert(); }});fromBase.addEventListener('change', function() { if (inputValue.value.trim()) { convert(); }});toBase.addEventListener('change', function() { if (inputValue.value.trim()) { convert(); }});
阅读原文:https://mp.weixin.qq.com/s/-QEX0FF4pEJD5de6IQ1cjg