假设我有一个特定的日期,例如 2013 年 1 月 10 日
。
我希望能够搜索文本或 html 文档以查看它是否包含对该日期的引用。我想考虑多种格式中的日期,例如:
1/10/2013
01/10/13
2013-01-10
10-Jan-2013
January 10, 2013
Jan 10, 2013
...都应该生成 2013 年 1 月 10 日
的 (+) 匹配结果。
我认识到交换日月顺序可能会出现问题,但在这种情况下我愿意接受误报结果,这意味着:
01-10-2013
10-01-2013
...就我而言,2013 年 1 月 10 日
都是可以接受的。
是否有一种用任何语言实现的既定算法可以执行这种广义但不平凡的搜索?我更喜欢 Ruby 或 JavaScript,但我会对任何经过深思熟虑的示例感兴趣。 附录 #1
我看到这段代码:
def validate_date(date_str)
valid_formats = ["%m/%d/%Y", "%m/%d/%Y %I:%M %P"]
#see http://www.ruby-doc.org/core-1.9.3/Time.html#method-i-strftime for more
valid_formats.each do |format|
valid = Time.strptime(date_str, format) rescue false
return true if valid
end
return false
end
here .
...这将是处理日期数字表示的好方法。这使得月份名称下落不明。由于 1、01、Jan 和 January 都代表一年中的第一个月,我想知道大量的排列是否在其他地方得到了很好的处理。
最佳答案
我不知道任何现有的解决方案,但编写自己的解决方案并不复杂。创建一个您想要搜索的日期格式的数组,然后简单地迭代这些格式,格式化您的日期并搜索您的文档:
require 'date'
formats = ["%-m/%e/%Y",
"%m/%d/%Y",
"%Y-%m-%d",
"%d-%b-%Y",
"%B %d, %Y",
"%b %d, %Y"]
d = Date.new(2013, 1, 10)
formats.each do |format|
search_string = d.strftime(format)
# Do your search for `search_string`
end
更新:一种更复杂、更有效的方法是将搜索字符串转换为正则表达式:
require 'date'
formats = ["%-m/%e/%Y",
"%m/%d/%Y",
"%Y-%m-%d",
"%d-%b-%Y",
"%B %d, %Y",
"%b %d, %Y"]
d = Date.new(2013, 1, 10)
regex = Regexp.union(formats.map{|f| Regexp.new(Regexp.quote(d.strftime(f)))})
# Search document for regex
关于javascript - 给定一个特定日期,是否有一种方法可以在自由文本文档中搜索该日期,而不知道该日期以哪种格式编写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17028708/