如何判断 javascript 字符串是数字还是日期?
How can I tell if a javascript string is a number OR a date?
我有一个可能是字符串化日期或数字的值。我想以不同的方式处理每个案例。
日期值可以是任何可以被日期库解析的有效日期字符串,比如dayjs。例如:"10/10/2020"
、"10-20-2020"
...
数字值可以是实际数字,也可以是字符串形式的数字,因此像 5
、"5.3"
、"10"
...
这样的值
例如 ->
const number = parseFloat(value);
if (!isNaN(number)) {
return NumberValueConverter.prototype.toView(number);
}
const date = dayjs(value);
if (date.isValid()) {
return DateValueConverter.prototype.toView(value);
}
虽然此代码不起作用 - 因为像 10-10-2020、10-10-2020 这样的日期字符串最终被解析为 10
如果我反过来做,dayjs 会将像 10 这样的数字转换为有效日期。
当给定的字符串以数字开头时,parseFloat
已经很满意,因此如果您随后对该结果进行测试 isNaN
,您将得到误报。
所以不检查result是否是数字,而是检查original字符串是否代表一个数字:
if (!isNaN(number)) {
至:
if (!isNaN(value)) {
或者,您可以使用一元加号代替 parseFloat
,当输入表示数字时,它只会 return 一个确定的数字:
const number = +value;
... 然后最好使用 Number.isNaN
:
进行测试
if (!Number.isNaN(number)) {
if(/^[0-9]+[.]{0,1}[0-9]*$/.test(value)) {
// Handle your number value
} else {
// Check for date here
}
您可以使用上面的正则表达式来解析数字字符串。
- /^ :指开始你的字符串
- $/ :指的是字符串的结尾
- [0-9]+ : 字符串的开头是从 0 到 9,最小长度为
- [.]{0,1} :可以包含 0 个或最多 1 个 '.'
- [0-9]* : 字符串末尾可以包含 0 到 9 位数字。
您可以使用正则表达式来测试字符串是否看起来像映射前的日期。
此正则表达式来自 https://www.regextester.com/96683
它会测试它是否看起来像您传入的日期。
如果您事先不知道格式,则有更复杂的正则表达式可以测试不同格式的日期:
if(([12]\d{3}/(0[1-9]|1[0-2])/(0[1-9]|[12]\d|3[01])).test(value)){
return date
} else if(isNan(value){
return number
}
我有一个可能是字符串化日期或数字的值。我想以不同的方式处理每个案例。
日期值可以是任何可以被日期库解析的有效日期字符串,比如dayjs。例如:"10/10/2020"
、"10-20-2020"
...
数字值可以是实际数字,也可以是字符串形式的数字,因此像 5
、"5.3"
、"10"
...
例如 ->
const number = parseFloat(value);
if (!isNaN(number)) {
return NumberValueConverter.prototype.toView(number);
}
const date = dayjs(value);
if (date.isValid()) {
return DateValueConverter.prototype.toView(value);
}
虽然此代码不起作用 - 因为像 10-10-2020、10-10-2020 这样的日期字符串最终被解析为 10
如果我反过来做,dayjs 会将像 10 这样的数字转换为有效日期。
parseFloat
已经很满意,因此如果您随后对该结果进行测试 isNaN
,您将得到误报。
所以不检查result是否是数字,而是检查original字符串是否代表一个数字:
if (!isNaN(number)) {
至:
if (!isNaN(value)) {
或者,您可以使用一元加号代替 parseFloat
,当输入表示数字时,它只会 return 一个确定的数字:
const number = +value;
... 然后最好使用 Number.isNaN
:
if (!Number.isNaN(number)) {
if(/^[0-9]+[.]{0,1}[0-9]*$/.test(value)) {
// Handle your number value
} else {
// Check for date here
}
您可以使用上面的正则表达式来解析数字字符串。
- /^ :指开始你的字符串
- $/ :指的是字符串的结尾
- [0-9]+ : 字符串的开头是从 0 到 9,最小长度为
- [.]{0,1} :可以包含 0 个或最多 1 个 '.'
- [0-9]* : 字符串末尾可以包含 0 到 9 位数字。
您可以使用正则表达式来测试字符串是否看起来像映射前的日期。 此正则表达式来自 https://www.regextester.com/96683 它会测试它是否看起来像您传入的日期。
如果您事先不知道格式,则有更复杂的正则表达式可以测试不同格式的日期:
if(([12]\d{3}/(0[1-9]|1[0-2])/(0[1-9]|[12]\d|3[01])).test(value)){
return date
} else if(isNan(value){
return number
}