2013-08-23 4 views
4

Есть ли лучший способ игнорировать прописные буквы, чем это?Как игнорировать прописные буквы с помощью start_with?

"Hello".start_with?("hell","Hell") #=> true 

Я хочу, чтобы проверить, является ли строка элемента в массиве начинается с другой строки, игнорируя верхний регистр, как LIKE % в MySQL.

ответ

4

Я хотел бы сделать что-то вроде этого:

'Hello'.upcase.start_with?('HELL') 

Другой подход к той же проблеме. Это эквивалентно делать что-то вроде UPPER(column) like 'SOMETHING%' в SQL.

5

Вы можете использовать regular expression с String#=~:

"Hello" =~ /^hell/i #=> 0 
"hELLO" =~ /^hell/i #=> 0 
"world" =~ /^hell/i #=> nil 

С 0 является truthy и nil является falsy это может быть использовано в if пункте:

if str =~ /^hell/i 
    # starts with hell 
end 
+0

Простые регулярные выражения гораздо больше ресурсов процессора и памяти интенсивнее, чем простые строковые операции, так что вы лучше использовать простые операции со строками (например, BEGINS_WITH). – Gewthen

0

Я думаю, лучше всего использовать совпадение регулярных выражений Ruby с флагом флага игнорирования:

'Hello'.match /^hell/i 

«^» обозначает начало строки. Без этого он будет соответствовать «аду» в любом месте строки. И последний «i» - это просто флаг регулярных выражений, указывающий совпадение с набором символов игнорирования.

Вы можете найти более подробную информацию о Руби Regex API здесь: http://www.regular-expressions.info/ruby.html

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