为了账号安全,请及时绑定邮箱和手机立即绑定

如何在没有正则表达式的情况下安全地区分在 queryParams

如何在没有正则表达式的情况下安全地区分在 queryParams

HUH函数 2021-06-30 08:11:34
例如,我在 url als 查询参数中存储了一个日期和金额属性...?日期=2019-06-12T06:20:39.465Z&amount=20000我希望能够解析所有查询参数并使用 javascript 将它们分配给正确的类型。目前我正在使用        paramMap.keys.forEach(key => {            let value: any = paramMap.get(key);            if (isFinite(Date.parse(value))) {                // keep as string            } else if (isFinite(parseInt(value, 10))) {                value = isInteger(value) ? parseInt(value, 10) : parseFloat(value);            } else if (value === 'true' || value === 'false') {                value = value === 'true';            }            obj[key] = value;        });        return obj;在这种情况下,amount=20000 将被 Date.parse 识别。还2019-06-12T06:20:39.465Z 将使用 parseInt 解析为 2019 ...isFinie、parseInt 和 isInteger 是从 lodash 导入的。如果可能,我不想使用正则表达式。编辑:请假设我不知道密钥的名称。因此脚本应该适用于所有属性。
查看完整描述

2 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

使用+operator、Number函数或 lodash_.toNumber()将返回NaN带有混合数字的字符串:


console.log(+'2019-06-12T06:20:39.465Z')


console.log(+'20000')

所以逻辑是:


const parseParam = value => {

  let v = +value


  if (!isNaN(v)) return v


  v = Date.parse(value)


  if (!isNaN(v)) return v


  if (value === 'true' || value === 'false') return value === 'true'


  return value

}


console.log(parseParam('2019-06-12T06:20:39.465Z'))

console.log(parseParam('20000'))

console.log(parseParam('false'))

console.log(parseParam('cats'))


查看完整回答
反对 回复 2021-07-01
?
慕容森

TA贡献1853条经验 获得超18个赞

ISO 可能会省略秒或时区或毫秒,但如果您忽略这些并检查其他所有内容,您可以可靠地检查不同的 ISO 格式。


console.log(isISO('2019-06-12T06:20:39.234Z'))

console.log(isISO('2019-06-12T06:20:39'))

console.log(isISO('2019-06-12T06:20'))


console.log(isISO("2019-1-1"))

console.log(isISO('2019-06-12T06:20:39+05'))


console.log(isISO('ketchup'))


function isISO(str) {

  try {

    str = str.split('+')[0];

    var iso = new Date(str).toISOString();

    var [date, time] = iso.split('T');

    var [y, m, d] = date.split('-');

    return iso.indexOf(`${y}-${m}-${d}`) === 0;

  } catch (e) {

    return false;

  }

}


查看完整回答
反对 回复 2021-07-01
  • 2 回答
  • 0 关注
  • 132 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信