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

时间:2019-05-04 13:37:02

标签: ruby

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

我不确定!(0..9).include?(char)为什么不能正常工作。

任何建议将不胜感激。 谢谢

def phone_number(str)
  if str.length == 9 && str[4] = " "
    str[4] = ""   
    str.each_char do |char|
      if !(0..9).include?(char)
        print false
      end
    end
    return true
  end
  return false
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

2 个答案:

答案 0 :(得分:1)

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

这是示例代码:

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

答案 1 :(得分:0)

如果您出于某种原因不使用正则表达式,那么使用纯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,并且仅由数字组成。