0

我有一个可以进行 api 调用的移动应用程序。在 api 调用中,我发送了应用程序的版本号,因为返回的 json 可能会因 api 版本而有所不同。

所以当我有应用程序版本2.4.1并且我需要检查当前的 api 版本2.4.4时,我一切都很好,因为我正在使用

如果 user_version.gsub('.','').to_i < server_version.gsub('.','').to_i
 //用户版本不是最新的,请他们更新
结尾

当有人发布 2.5 版时,问题就出现了。使用上面的代码,用户将拥有2.4.4哪个被翻译244成大于服务器端2.525.

您将如何检查以涵盖这些情况?

4

2 回答 2

0

您可以使用正则表达式解析版本号,如下所述:A regex for version number parsing

这个会做:^(?:(\d+)\.)?(?:(\d+)\.)?(\*|\d+)$

所以:

version_regex = /^(?:(\d+)\.)?(?:(\d+)\.)?(\*|\d+)$/
user_version_array = user_version.match(version_regex)[1..3].compact.map(&:to_i)
server_version_array = server_version.match(version_regex)[1..3].compact.map(&:to_i)

为了干燥起见,您可能希望将其分解为辅助方法:

def parse_version(str)
  version_regex = /^(?:(\d+)\.)?(?:(\d+)\.)?(\*|\d+)$/
  str.match(version_regex)[1..3].compact.map(&:to_i)
end

对于 and 的示例user_version = '2.4.4'server_version = '2.5'它为您提供了数组:

user_version_array = [2,4,2]
server_version_array = [2,5]

然后,您可以轻松地遍历这些以进行比较:

compliant_version = true
(0..2).each do |i|
  if (user_version_array[i] || 0) < (server_version_array[i] || 0)
    compliant_version = false
  end
end
于 2013-05-06T17:38:58.167 回答
0

原来这是作为一个类包含在 Rails http://rubygems.rubyforge.org/rubygems-update/Gem/Version.html

比自己写要容易得多。:)

于 2013-05-08T01:46:32.113 回答