我有一个可能是字符串化日期或数字的值。我想以不同的方式处理每一件案子。
日期值可以是任何可由日期库解析的有效日期字符串,如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这样的数字转换为有效日期。
发布于 2021-03-18 08:02:41
当给定的字符串以数字开头时,parseFloat
已经很高兴了,所以如果您然后对该结果测试isNaN
,就会得到假阳性。
因此,不要检查结果是否是数字,而是原始字符串是否代表数字:
if (!isNaN(number)) {
至:
if (!isNaN(value)) {
或者,您可以使用一元加号代替parseFloat
,当输入表示一个数字时,该加号只返回一个确定的数字:
const number = +value;
..。然后使用Number.isNaN
进行测试是最好的实践。
if (!Number.isNaN(number)) {
发布于 2021-03-18 08:10:56
if(/^[0-9]+[.]{0,1}[0-9]*$/.test(value)) {
// Handle your number value
} else {
// Check for date here
}
可以使用上面的正则表达式来解析数字字符串。
<代码>H 1100-9*:字符串末尾可以包含0到9位数。H 211F 212>F 212
发布于 2021-03-18 08:13:18
您可以使用regex测试字符串在映射之前是否像日期。这个正则表达式来自https://www.regextester.com/96683,它测试是否看起来像您传入的日期。
如果事先不知道格式,还有更复杂的regex测试不同格式的日期:https://stackoverflow.com/a/15504877/14948219
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
}
https://stackoverflow.com/questions/66694653
复制相似问题