JavaScript输入验证问题:需实现逗号分隔与换行格式的错误提示
修复JavaScript输入验证逻辑问题
当前的验证函数存在逻辑错误,导致符合要求的输入也会弹出错误提示。以下是针对两个验证规则的修正方案:
问题分析
原代码的核心问题:
- 未定义
input_text变量,直接调用match方法会报错; match返回的是数组,直接与字符串比较永远不相等,必然触发错误提示;- 没有实现「每个输入项单独占一行」的验证逻辑。
修正后的验证函数
function verify() { const inputEl = document.getElementById('input-text'); const inputValue = inputEl.value.trim(); // 验证输入为空的情况 if (!inputValue) { alert("不能为空,请输入模块名称和分数,用逗号分隔,每行一个条目"); return false; } // 按换行分割输入,过滤掉空行 const lines = inputValue.split('\n').map(line => line.trim()).filter(line => line); // 验证每行都包含逗号 const hasNoCommaLine = lines.some(line => !line.includes(',')); if (hasNoCommaLine) { alert("所有模块名称和分数必须用逗号分隔"); return false; } // 验证每行格式为「模块名称,分数」,避免同一行多个条目或格式错误 const invalidLineFormat = lines.some(line => { const parts = line.split(','); // 确保每行只有一个逗号,分数是数字,模块名称不为空 return parts.length !== 2 || isNaN(parts[1].trim()) || parts[0].trim() === ''; }); if (invalidLineFormat) { alert("请严格按照「模块名称,分数」格式输入,每行仅填一个条目"); return false; } // 所有验证通过,返回true允许后续执行getTotal() return true; }
修正按钮点击逻辑
原按钮点击时会同时执行verify()和getTotal(),即使验证失败也会执行计算。修改为只有验证通过才执行getTotal():
<button class="sgcbutton-active" onclick="if(verify()) getTotal();">Total Marks</button>
正确输入示例
Programming,70
Data,60
Computing,40
内容的提问来源于stack exchange,提问作者NovaBrownie
相关产品推荐
相关产品推荐

