2015-09-02 5 views
1

Я новичок в 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 

Но у меня нулевой опыт работы с регулярными выражения. Как я могу использовать приведенный выше код для решения моей проблемы? Благодарю.

ответ

2

Вот надуманное решение:

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 цифр
  • $ означает конец строки

Если у вас нет опыта работы с регулярными выражениями, вам стоит найти учебник и потратить время на изучение основ. И http://rubular.com/ - это редактор регулярных выражений в Интернете, который я не могу поддерживать достаточно строго.

+0

Большое вам спасибо! Я бы никогда не мог придумать регулярное выражение, даже наполовину легкое. Ваше пошаговое объяснение действительно помогло. – MDB

+1

Рад, что это помогло. – orde

Смежные вопросы