JavaScript中URL分页参数非数字时重定向及引号字符类型判断
问题解答
问题1:如何判断引号包裹字符的类型?
针对引号包裹的字符串内容,可通过以下方式判断其实际类型:
- 判断是否为数字:
可以通过类型转换结合isNaN()校验,或用正则匹配纯数字(支持整数、浮点数):const str = "123.45"; // 方法1:转换后校验 const isNumber = !isNaN(Number(str)) && typeof Number(str) === 'number'; // 方法2:正则匹配 const numberRegex = /^-?\d+(\.\d+)?$/; const isNumber = numberRegex.test(str); - 判断是否为布尔值:
直接比对字符串是否为"true"或"false"(注意大小写匹配):const str = "false"; const isBoolean = str === "true" || str === "false"; - 判断是否为普通字符串:
排除上述数字、布尔值的情况后,即可判定为普通文本字符串。
问题2:URL分页参数的数字校验与重定向
你遇到的报错是因为JSON.parse(queries.page)的使用逻辑错误:URL参数page=g对应的queries.page是字符串"g",而JSON.parse要求输入为合法JSON格式——比如解析字符串类型的JSON值需要传入带双引号的内容(如JSON.parse('"g"')),直接传"g"会触发语法错误。
推荐两种简洁安全的校验方案:
方案1:类型转换结合整数校验
分页参数通常为正整数,转换后校验是否为有效整数:
const pageParam = queries.page; const pageNum = Number(pageParam); // 校验:是数字、是整数、且大于0 if (isNaN(pageNum) || !Number.isInteger(pageNum) || pageNum <= 0) { // 重定向到目标路径,比如默认第一页 window.location.href = '/posts?page=1'; } else { // 执行正常分页逻辑 }
方案2:正则匹配正整数
用正则直接精准匹配合法的分页参数格式:
const pageParam = queries.page; const positiveIntRegex = /^[1-9]\d*$/; if (!positiveIntRegex.test(pageParam)) { window.location.href = '/posts?page=1'; } else { const pageNum = parseInt(pageParam, 10); // 执行正常分页逻辑 }
内容的提问来源于stack exchange,提问作者Mahmoud Mirzaei
相关产品推荐
相关产品推荐

