首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何判断javascript字符串是数字还是日期?

如何判断javascript字符串是数字还是日期?
EN

Stack Overflow用户
提问于 2021-03-18 15:58:44
回答 3查看 458关注 0票数 0

我有一个可能是字符串化日期或数字的值。我想以不同的方式处理每一件案子。

日期值可以是任何可由日期库解析的有效日期字符串,如dayjs。例如:"10/10/2020""10-20-2020"..。

数字值可以是实际数字,也可以是字符串形式的数字,所以像5"5.3""10"这样的值.

例如,->

代码语言:javascript
运行
复制
      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这样的数字转换为有效日期。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-03-18 16:02:41

当给定的字符串以数字开头时,parseFloat已经很高兴了,所以如果您然后对该结果测试isNaN,就会得到假阳性。

因此,不要检查结果是否是数字,而是原始字符串是否代表数字:

代码语言:javascript
运行
复制
if (!isNaN(number)) {

至:

代码语言:javascript
运行
复制
if (!isNaN(value)) {

或者,您可以使用一元加号代替parseFloat,当输入表示一个数字时,该加号只返回一个确定的数字:

代码语言:javascript
运行
复制
const number = +value;

..。然后使用Number.isNaN进行测试是最好的实践。

代码语言:javascript
运行
复制
if (!Number.isNaN(number)) {
票数 1
EN

Stack Overflow用户

发布于 2021-03-18 16:10:56

代码语言:javascript
运行
复制
if(/^[0-9]+[.]{0,1}[0-9]*$/.test(value)) {
     // Handle your number value
} else {
     // Check for date here
}

可以使用上面的正则表达式来解析数字字符串。

  • /^:指启动字符串
  • $/:指字符串的末尾(
  • 0-9+):字符串的起始值为0到9,最小长度为1
  • 。{0,1}:可以包含0或最多包含1‘.’

<代码>H 1100-9*:字符串末尾可以包含0到9位数。H 211F 212>F 212

票数 1
EN

Stack Overflow用户

发布于 2021-03-18 16:13:18

您可以使用regex测试字符串在映射之前是否像日期。这个正则表达式来自https://www.regextester.com/96683,它测试是否看起来像您传入的日期。

如果事先不知道格式,还有更复杂的regex测试不同格式的日期:https://stackoverflow.com/a/15504877/14948219

代码语言:javascript
运行
复制
 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
    
 }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66694653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档