我正在尝试检查字符串是否为格式正确的电话号码 “ 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
答案 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,并且仅由数字组成。