我有一个休息调用,它给我查询参数的信息,我需要确定它们是字符串还是int,数组,布尔值。
例如,如果我有:
/.../something?ID=1
我会收到'1',但我知道这是一个整数。
此外,我有:
/.../something?ID=[1,2,3]
我会收到'[1,2,3]',但我知道这是一个数组。最后,如果我有:
/.../something?ID=string
我将收到'string',我应该将它用作常规字符串。
正则表达式是对每种类型进行检查的唯一方法吗?
你可以使用JSON.parse
和catch块。
var options = ['12', '[1,2,3]', 'string', 'false', '{"x" : 2}', '/hey/', /hey/];
var parsed = options.map(x => {
try {
return JSON.parse(x)
} catch(e) {
return x;
}
});
var types = parsed.map(x => /\[object (.*)\]$/.exec(Object.prototype.toString.call(x))[1])
console.log(types);
一旦你有一个value
var value = "1"; //or whatever value after `id=`
你可以应用这个逻辑
var type = "";
var isNum = ( s ) => !isNaN(s);
var isObject = ( s ) => {
try { s = JSON.parse(s); return Array.isArray(s) ? "array" : "object" } catch( e ){ return false }
};
现在用它们作为
type = isNum( value ) ? "number" : ( isObject( s ) || "string" );
注意
value
是一个函数定义,它仍然会返回一个string
解决此问题的一种方法是使用反复试验方法:
[
开始并以]
结尾的值,你可能会认为它是一个数组。使用JSON.parse
可以肯定。/^\d+$/
根据整数值测试字符串。使用parseInt()
可以肯定。萨维奥,
您可以处理它的一种方法是获取值并使用带有'typeof'的switch / case语句来查看它们是什么。
// Numbers
typeof 37 === 'number';
typeof 3.14 === 'number';
// Strings
typeof 'bla' === 'string';
// Booleans
typeof true === 'boolean';
// use Array.isArray or Object.prototype.toString.call
// to differentiate regular objects from arrays
typeof [1, 2, 4] === 'object';