ruby 检查字符串是否只包含拼音数字

5jvtdoz2  于 2023-01-25  发布在  Ruby
关注(0)|答案(8)|浏览(143)

我有一个字符串作为参数传递给一个函数。这里,我想检查这个字符串是否只包含数字。所以我做了如下检查:

def check_string(string)
  result = false
  if string.to_i.to_s.eql? string
    result =  true
  end
  result
end

但是当字符串以0开头时,问题就出现了。在这种情况下,返回false。

check_string('123')  #=> true
check_string('0123') #=> false

我该如何解决这个问题?

oipij1gg

oipij1gg1#

您可以尝试以下操作

def check_string(string)
  string.scan(/\D/).empty?
end

如果string只包含数字或为空字符串,则为true。否则返回false。

jaql4c8m

jaql4c8m2#

一个数字可以是负数,也可以是浮点数。因此,如果这些都是允许的,请考虑以下解决方案:

def is_numberic?(str)
    str == "#{str.to_f}" || str == "#{str.to_i}"
end

一些评估为真输入

pry(main)> is_numberic? '5'
=> true
pry(main)> is_numberic? '58127721'
=> true
pry(main)> is_numberic? '58127721.737673'
=> true
pry(main)> is_numberic? '0'
=> true
pry(main)> is_numberic? '1818'
=> true
pry(main)> is_numberic? '0.1'
=> true
pry(main)> is_numberic? '0.0'
=> true
pry(main)> is_numberic? '11.29'
=> true
pry(main)> is_numberic? '-0.12'
=> true
pry(main)> is_numberic? '-29'
=> true

评估为假的输入

pry(main)> is_numberic? '10 years'
=> false
pry(main)> is_numberic? '01'
=> false
pry(main)> is_numberic? '00'
=> false
pry(main)> is_numberic? '0.10'
=> false
pry(main)> is_numberic? ''
=> false

正如您所看到的,有几种情况可能应该得到支持,例如'0.10',但实际上没有。在本例中,允许的输入是'0.1'

vqlkdk9b

vqlkdk9b3#

def check_string(str)
  str !~ /\D/
end

check_string '123'
  #=> true
check_string ''
  #=> true
check_string '1a2'
  #=> false
odopli94

odopli944#

这是我的建议,用于检测它是否是浮点数

def check(string)
  scan = string.scan(/\D/)
  scan.size == 0 || (scan.size == 1 && scan.first == ".") # or "," depend on your separator
end

使用示例:

check("123") => true
check("12.3") => true
check("12e3") => false
check("12.3.2") => false

**编辑:**2023几年后,我发现这是最紧凑的解决方案:

def check_string(str)
  str.scan(/\D/).empty?
end
4xy9mtcn

4xy9mtcn5#

您可以使用Regexp:

def check_string(string)
  raise 'Empty string passed' if string.empty?

  /\A\d+\z/ === string
end

check_string '123'
#=> true
check_string '0123'
#=> true
check_string '0'
#=> true
smtd7mpg

smtd7mpg6#

我们也可以使用“match”函数来实现这一点。

"1234".match(/\D/)
#=> nil
"1234foo".match(/\D/)
#=> #<MatchData "f">

match (String) - APIdock

krugob8w

krugob8w7#

我想我们应该用正则表达式来求这个。

it will work for the below scenarios
"3.0"
"av3"
"3"

如果选项.选项.匹配,则is_numeric = false(/[^0-9.]/)

doinxwow

doinxwow8#

如果有人正在寻找另一种方法来确定字符串是否为数字-〉,则使用"is_a?Numeric". Is_a? reference documentation

"namaste".is_a? Numeric
=> false

6.is_a? Numeric
=> true

str1 = "foo"
str2 = 9

str1.is_a? Numeric
=> false
str2.is_a? Numeric
=> true

您还可以使用:

7.is_a?(Numeric)
=> true

"too".is_a?(Numeric)
=> false

基本上它决定了一个类是否是类对象的类型,我刚刚发现了这个,我想分享一下。

相关问题