首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用Ruby测试字符串是否基本上是用引号括起来的整数

如何使用Ruby测试字符串是否基本上是用引号括起来的整数
EN

Stack Overflow用户
提问于 2009-08-05 21:28:21
回答 20查看 128.1K关注 0票数 143

我需要一个函数,is_an_integer,其中

  • "12".is_an_integer?返回true.
  • "blah".is_an_integer?返回false。

我如何在Ruby中做到这一点?我会写一个正则表达式,但我假设有一个我不知道的帮助器。

EN

回答 20

Stack Overflow用户

回答已采纳

发布于 2009-08-05 21:59:23

您可以使用正则表达式。以下是@janm建议的函数。

代码语言:javascript
复制
class String
    def is_i?
       !!(self =~ /\A[-+]?[0-9]+\z/)
    end
end

根据@wich的评论编辑的版本:

代码语言:javascript
复制
class String
    def is_i?
       /\A[-+]?\d+\z/ === self
    end
end

以防你只需要检查正数

代码语言:javascript
复制
  if !/\A\d+\z/.match(string_to_check)
      #Is not a positive number
  else
      #Is all good ..continue
  end  
票数 143
EN

Stack Overflow用户

发布于 2009-08-05 21:35:27

好吧,这里有一个简单的方法:

代码语言:javascript
复制
class String
  def is_integer?
    self.to_i.to_s == self
  end
end

>> "12".is_integer?
=> true
>> "blah".is_integer?
=> false

我不同意引发异常来转换字符串的解决方案-异常不是控制流,你最好用正确的方式来做。也就是说,我上面的解决方案没有处理非10进制的整数。因此,下面是不用求助于异常的方法:

代码语言:javascript
复制
  class String
    def integer? 
      [                          # In descending order of likeliness:
        /^[-+]?[1-9]([0-9]*)?$/, # decimal
        /^0[0-7]+$/,             # octal
        /^0x[0-9A-Fa-f]+$/,      # hexadecimal
        /^0b[01]+$/              # binary
      ].each do |match_pattern|
        return true if self =~ match_pattern
      end
      return false
    end
  end
票数 194
EN

Stack Overflow用户

发布于 2009-08-05 21:31:24

您可以使用Integer(str),并查看它是否会引发:

代码语言:javascript
复制
def is_num?(str)
  !!Integer(str)
rescue ArgumentError, TypeError
  false
end

应该指出的是,虽然这对于"01"确实会返回true,但对于"09"则不会,因为09不是有效的整数文本。如果这不是您想要的行为,您可以将10作为第二个参数添加到Integer,这样这个数字总是被解释为基数10。

票数 70
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1235863

复制
相关文章

相似问题

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