Ваше регулярное выражение проверяет только заглавную букву, за которой сразу следует строчная буква / число / подчеркивание / любой символ, а затем пробел.
Вам нужно что-то, что учитывает несколько значений после первого, которые соответствуют вашим критериям. Вы можете использовать +
для этого
Вот образец, который соответствует вашим критериям теста. Однако он не соответствует вашему полному набору правил.
def sentence?(sentence)
sentence = sentence.strip
if sentence =~ /^[A-Z][a-z0-9_. ]+[\.?!]$/
puts " Correct >>> " + sentence + " <<< Is a valid sentence!"
else
puts "INCORRECT >>> " + sentence + " Is NOT a valid sentence "
end
end
sentence?('Hello!') # valid
sentence?('hello!') # not valid
sentence?('HHello!') # not valid
sentence?('HeLlo!') # not valid
Вы можете использовать rubular , чтобы увидеть, как регулярное выражение захватывает различные предложения / фразы
Вот что-то, что соответствует критериям, которые вы описали
def real_sentence?(sentence)
sentence = sentence.strip
if sentence =~ /^[A-Z][a-z]+(\s[a-z]+){0,}[?!\.]$/
puts " Correct >>> " + sentence + " <<< Is a valid sentence!"
else
puts "INCORRECT >>> " + sentence + " Is NOT a valid sentence "
end
end
real_sentence?('Hello how are you John?!') # not valid
real_sentence?('hello how are you?') # not valid
real_sentence?('Hello!') # valid
real_sentence?('Hello how are you?') # valid