我正在创建一个基本的句子检查器,该检查器使用一个字符串并使用以下规则确定该字符串是否有效
我尝试了以下代码-涵盖1,4。但是2仅在第一个字符之后可用
puts "Enter your sentence: "
sentence = gets.chomp
if (sentence =~ /^[A-Z][a-z0-9_.]\s/ && sentence.end_with?('.','?','!'))
puts "Correct >>> " + sentence + " <<< Is a valid sentence!"
else
puts "Incorrect >>> " + sentence + " Is NOT a valid sentence "
end
预期结果
输入您的句子: 你好! 正确>>>您好! <<<是有效的句子!
输入您的句子: 你好! 错误>>>您好!不是有效的句子
输入您的句子: 你好! 错误>>>您好!不是有效的句子
意外结果 你好! 正确>>> HeLlo! <<<是有效的句子!
对于每个单词之间使用\ s的单个空格,但允许多个空格
答案 0 :(得分:-1)
您的正则表达式仅检查大写字母,然后立即检查小写字母/数字/下划线/任何字符,再跟一个空格。
在第一个符合您条件的值之后,您需要一些允许多个值的值。您可以为此使用+
这是符合您测试标准的样品。但是,它不符合您的全部规则。
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