字符串末尾两位数字(01-40)验证问题:00未被正确拦截求助
字符串ID最后两位数字验证问题解决办法
你的当前代码逻辑完全错误,这才导致'00'能通过验证。原判断id.charAt(10)<='0'&& id.charAt(11)<= '9'只要求第10位是'0'、第11位是0-9就返回true,完全没做01-40的范围校验。
正确的处理方式如下:
核心思路
- 提取ID的最后两位字符(建议用
slice(-2)代替固定索引,避免ID长度变化导致的索引错误) - 验证这两位是否为纯数字
- 将其转为数字后,判断是否在1到40的范围内(01转数字是1,40保持40,刚好覆盖需求的01-40)
修正后的代码示例
function validateIdLastTwo(id) { // 先检查ID长度至少有2位 if (id.length < 2) { return false; } // 提取最后两位字符 const lastTwo = id.slice(-2); // 验证是否为两位纯数字 if (!/^\d{2}$/.test(lastTwo)) { return false; } // 转为十进制数字 const num = parseInt(lastTwo, 10); // 判断是否在1-40之间(包含边界) return num >= 1 && num <= 40; }
补充说明
你问是否需要拼接后判断?是的,但光拼接字符串还不够——直接用字符串做范围判断容易出问题(比如'09'和'10'的字符串比较,'09'会被认为大于'10',因为字符'0'的ASCII码小于'1'),所以转成数字再做范围判断是最稳妥的方式。
内容的提问来源于stack exchange,提问作者user17273353
相关产品推荐
相关产品推荐

