我有一个字符串作为参数传递给函数.在这里,我想检查字符串是否只包含数字.所以我有一张如下的支票:
def check_string(string)
result = false
if string.to_i.to_s.eql? string
result = true
end
result
end
Run Code Online (Sandbox Code Playgroud)
但是当字符串以0开头时出现问题.在这种情况下,返回false.
check_string('123') #=> true
check_string('0123') #=> false
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
Ale*_*sey 27
您可以尝试以下方法
def check_string(string)
string.scan(/\D/).empty?
end
Run Code Online (Sandbox Code Playgroud)
如果字符串只包含数字,那将是真实的.
数字可以是负数,也可以是浮点数。因此,如果允许,请考虑以下解决方案:
def is_numberic?(str)
str == "#{str.to_f}" || str == "#{str.to_i}"
end
Run Code Online (Sandbox Code Playgroud)
一些评估为 true 的输入
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
Run Code Online (Sandbox Code Playgroud)
评估结果为 false 的输入
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
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,有几种情况可能应该受到支持,例如'0.10',但实际上没有。在这种情况下,允许的输入是'0.1'。
def check_string(str)
str !~ /\D/
end
check_string '123'
#=> true
check_string ''
#=> true
check_string '1a2'
#=> false
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11497 次 |
| 最近记录: |