JS实现4位正整数PIN校验时如何排除带.0后缀的字符串输入?
PIN校验逻辑修复方案
你遇到的问题根源是现有判断没有限制字符串的字符类型,只要整体可转成数字就会通过,"12.0" 这类带小数点的字符串刚好长度为4、可转成整数,所以会被误判。
方案1:正则实现(最简洁)
直接用正则匹配严格的4位纯数字字符串:
function fn(pin) { // ^ 匹配字符串开头,$ 匹配字符串结尾,\d 匹配0-9数字,{4} 限制刚好4位 return /^\d{4}$/.test(pin) && Number(pin) > 0; }
该方案可以完全过滤带小数点、字母、特殊符号的输入,不会影响"1234"这类合法输入的判断。
方案2:非正则原生实现
如果不想用正则,可以新增单字符校验逻辑:
function fn(pin) { // 先判断长度和数值范围 if (pin.length !== 4 || Number(pin) <= 0) return false; // 遍历每一位字符判断是否为数字 for (const char of pin) { if (isNaN(Number(char))) return false; } return true; }
"12.0"里的小数点字符转数字会得到NaN,会直接返回false,符合你的需求。
测试用例验证
fn("1234")→ truefn("12.0")→ falsefn("123a")→ falsefn("0000")→ false(如果需要支持全0PIN,去掉Number(pin) > 0的条件即可)
内容的提问来源于stack exchange,提问作者notMe
相关产品推荐
相关产品推荐

