例如,我在url als查询参数中存储了日期和金额属性
...?date = 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;
在这种情况下,金额= 20000将被Date.parse识别。
也
2019-06-12T06:20:39.465Z将使用parseInt ...解析为2019年...
isFinie,parseInt和isInteger是从lodash导入的。
如果可能的话,我不想使用正则表达式。
编辑:请假定我不知道密钥的名称。因此,该脚本应适用于所有属性。
答案 0 :(得分:2)
ISO可能会省略秒,时区或毫秒,但是如果忽略这些内容,并检查所有其他内容,则可以可靠地检查不同的ISO格式。
$main_url= parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$main_url_segment= explode('/', $main_url);
$url_2= $main_url_segment[2];
$is_page ="page-to-run-script";
if($is_page == $url2){
// run script A...
} else {
// run script B...
}
答案 1 :(得分:1)
使用+
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'))