Arrays 获取用户输入并确认格式

Arrays 获取用户输入并确认格式,arrays,ruby,regex,input,Arrays,Ruby,Regex,Input,我是Ruby新手:我只完成了它的codecademy,而且我对Rails的经验非常有限 我正在尝试创建一个简单的函数,它将接受用户的输入,并查看它是否符合序列号的正确标准:三个大写字母、一个破折号,然后是七个数字 以下是我到目前为止的情况: "enter serial" serialNumber = gets.chomp serNumarr = serialNumber.split("") caps = serNumarr[0..2] dash = serNumarr[3] nums = s

我是Ruby新手:我只完成了它的codecademy,而且我对Rails的经验非常有限

我正在尝试创建一个简单的函数,它将接受用户的输入,并查看它是否符合序列号的正确标准:三个大写字母、一个破折号,然后是七个数字

以下是我到目前为止的情况:

"enter serial"
serialNumber = gets.chomp

serNumarr = serialNumber.split("")

caps = serNumarr[0..2]
dash = serNumarr[3]
nums = serNumarr[4..10]

if dash != "-"
    puts "not a serial Number"
end
现在我也在其他论坛上询问过,他们告诉我要使用以下代码:

def letter?(lookAhead)
  lookAhead =~ /[[:alpha:]]/
end

但我对正则表达式没有任何经验。如何使用上述代码解决我的问题?谢谢。

这里有一个精心设计的解决方案:

puts "enter three capital letters, a dash, and then seven numbers:"
input = gets.chomp  #=> note that input is a String

if input =~ /^[A-Z]{3}-\d{7}$/
  puts "valid"
else
  puts "invalid"
end
将正则表达式分解为人类可读的语言:

  • ^
    表示行的开头(除非它在字符类中是否定的)
  • [A-Z]{3}
    表示任何大写字母的3
    []
    表示一个字符类(即大写字母),关联的
    {3}
    表示正好三个字符类
  • -
    是破折号字符
  • \d{7}
    表示正好7位数字
  • $
    表示行尾

如果您没有使用正则表达式的经验,那么找一本教程并花时间学习基础知识是值得的。并且是一个在线正则表达式编辑器,我非常支持。

非常感谢!我永远也不会想出一个正则表达式,哪怕是它的一半那么简单。你一步一步的解释也很有帮助。