使用Date.parse();从动态文本中删除(或允许)序数字符;

Removing (or allowing) ordinal characters from dynamic text with Date.parse();

本文关键字:字符 删除 序数 动态 parse Date 使用 文本      更新时间:2024-05-16

我正在构建一个自贬值的日期列表,并使用Date.parse()将富文本转换为时间戳。现在,我们有一个系统,用户自己输入日期,我在后端使用令牌将其拉到特定页面。

我试图"保护用户"不输入错误的日期格式。

目前,如果他们输入January 12th, 2016,由于th,它将无法解析和创建时间戳。但是,如果他们输入January 12, 2016,它可以创建一个时间戳。

有没有办法替换动态字符串上的这些序数?我尝试了一个简单的jquery查找/替换,但没有成功地用它来删除序号日期文本。

我尝试过的:

$('.my-button').each(function() {
    console.log($(this).text());
    var text = $(this).text().replace('st, ', '');
    $(this).text(text);
});

关于解决方案,或者让Date.parse():接受这些额外字符的方法,有什么想法吗?

对于从日期字符串(如"2016年1月12日")中删除序数的简单情况,可以使用正则表达式,如:

var re = /('d{1,2})[a-z]{2}'b/i;
['January 12th, 2016','January 1st, 2016','January 2nd, 2016','20th February, 2015'].forEach(
  function(s) {
    document.write('<br>' + s.replace(re,'$1'));
  }
);

但是,强烈建议不要使用Date.parse(和Date构造函数,它们相当于解析)解析字符串。使用解析器并定义格式,不要听之任之。

有像moment.js这样的库,但是对于您的需求来说,它可能太大了。还有其他专用的解析器(请查看GitHub),或者如果您只需要支持一种格式,请自己编写一种。它只需要三四行代码。