2017-02-21 4 views
1

я написал несколько строк коды, как это:рубин множественной строка матч с

if((user_input.include?('string_a') || 
    (user_input.include? ('string_b')) || 
    (user_input.include?('string_c'))) 
    && 
    user_input.include?('string_d_keyword')) 
    .... 
end # if 

есть любая функция, которая может упростить «множественное или строковое матч», приняв несколько аргументов и посмотреть, как это?

if((user_input.multi_include_or?('string_a','string_b','string_c')) 
    && (user_input.include?('string_d_keyword'))) 
..... 
end # if 

Я надеюсь сделать это все в одной строке, и поэтому я не учитываю вариант «случай когда».

Благодаря ~

+0

Я удалил свой ответ, увидев, что я неправильно понял вопрос. Я думал, что 'user_input' был массивом строк. Совершенно ясно, что это строка. –

ответ

2

Вы можете сделать матч регулярного выражения, используя | (или):

if user_input.match? /string_a|string_b|string_c|string_d_keyword/ 
    … 
end 

Если строки в массиве вы можете используйте Regex.union, чтобы преобразовать их в соответствующее регулярное выражение:

if user_input.match? Regex.union(strings) 
    … 
end 
+0

благодарит за ответ. BTW, я должен использовать этот формат, чтобы он работал: user_input.match (/ string_a | string_b /) thx again ~ – ioojimooi

0

использовать массив и any?

> user_input = "string_a" 
=> "string_a" 
> ["asd","string_a"].any? {|a| user_input.include? a} 
=> true 
+1

Что такое downvote? Что-то не так с этим решением? – Coolness

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