Ruby 使用include?命令搜索包含数字和字母混合的字符串

Ruby 使用include?命令搜索包含数字和字母混合的字符串,ruby,Ruby,我正在尝试检查字符串是否是格式中的有效电话号码 “XXXX XXXX”,其中每个X是0到9之间的整数。如果其有效值返回TRUE,否则返回FALSE 我不知道为什么!(0..9).包括?(字符)无法正常工作 如有任何建议,将不胜感激。 谢谢 我建议使用正则表达式来实现您想要做的事情 下面是示例代码: def phone_number(str) !!str.match(/^\d{4}\s{1}\d{4}$/) end print phone_number("1234 5678") # =>

我正在尝试检查字符串是否是格式中的有效电话号码 “XXXX XXXX”,其中每个X是0到9之间的整数。如果其有效值返回TRUE,否则返回FALSE

我不知道为什么
!(0..9).包括?(字符)
无法正常工作

如有任何建议,将不胜感激。 谢谢


我建议使用正则表达式来实现您想要做的事情

下面是示例代码:

def phone_number(str)
 !!str.match(/^\d{4}\s{1}\d{4}$/)
end

print phone_number("1234 5678") # => true
puts
print phone_number("123 5678") # => false
puts
print phone_number("1234 df78") # => false
puts
print phone_number("12345678") # => false

如果出于某种原因不使用正则表达式,使用纯Ruby仍然可以:

λ = ->(str) {
  str.split(' ').tap do |parts|
    break [""] unless parts.size == 2        
  end.all? do |s|
    s.length == 4 && s.delete('[0-9]').empty?
  end
}

["1234 5678", "123 5678", "1234 df78", "12345678", "1234"].map(&λ)
#⇒ [true, false, false, false, false]

在这里,我们将字符串按部分拆分,检查部分的数量是否正好为2,两个部分的长度均为4,并且仅由数字组成。

!(0..9).include?(char)
不起作用,因为
char
不是一个数字。它:只要读一读你用英语大声写的那句话:“数字0到9的范围包括这个字符吗?”要修改代码,请使用字符范围:而不是
0..9
使用
?0..9
。那就行了。
λ = ->(str) {
  str.split(' ').tap do |parts|
    break [""] unless parts.size == 2        
  end.all? do |s|
    s.length == 4 && s.delete('[0-9]').empty?
  end
}

["1234 5678", "123 5678", "1234 df78", "12345678", "1234"].map(&λ)
#⇒ [true, false, false, false, false]