JS圆半径输入合法性校验:排除特殊字符、字母及混合值
解决半径输入的合法性验证问题
要实现你需要的输入验证,核心是确保输入为纯正数字(不能包含字母、特殊字符,也不允许数字与其他字符混合的格式),同时保留原有的<=0判断逻辑。以下是完整的实现代码及关键说明:
完整代码
let radius = prompt("write radius"); // 处理用户取消输入的情况 if (radius === null) { console.log("Incorrect data"); } else { // 正则匹配合法的正数字:支持整数、带小数的正数,排除纯0、混合字符的情况 const validNumberRegex = /^[1-9]\d*(\.\d+)?$|^0\.\d+$/; // 移除输入前后空格后验证格式 if (!validNumberRegex.test(radius.trim())) { console.log("Incorrect data"); } else { const numRadius = Number(radius); // 确保半径数值大于0 if (numRadius <= 0) { console.log("Incorrect data"); } else { const area = Math.PI * Math.pow(numRadius, 2); console.log(`area = ${area.toFixed(2)}`); // 保留两位小数优化输出 } } }
关键逻辑说明
- 正则验证格式:
/^[1-9]\d*(\.\d+)?$|^0\.\d+$/会严格匹配:- 非0开头的整数(如
5、123)或带小数的正数(如3.14、10.5) - 0开头的合法小数(如
0.5、0.123),但排除纯0的情况
- 非0开头的整数(如
- 处理边界情况:
- 捕获用户点击取消输入的场景(此时
radius为null) - 用
.trim()移除输入前后的空格,避免用户误输入空格导致验证失败
- 捕获用户点击取消输入的场景(此时
- 分步验证:先验证格式合法性,再转换为数字判断数值是否大于0,确保混合字符(如
1a、$1)、非数字输入都会被拦截。
内容的提问来源于stack exchange,提问作者greenuser
相关产品推荐
相关产品推荐

