Решение:
# /initializers/string.rb
class String
IntegerRegex = /^(\d)+$/
def integer?
!!self.match(IntegerRegex)
end
end
# any_model_or_controller.rb
'12345'.integer? # true
'asd34'.integer? # false
Объяснение:
/^(\d)+$/
- выражение regex для нахождения цифр в любой строке. Вы можете проверить выражения и результаты регулярных выражений на http://rubular.com/ . IntegerRegex
, чтобы избежать ненужного выделения памяти каждый раз, когда мы ее используем в методе. integer?
- это вопросительный метод, который должен возвращать true
или false
. match
- метод в строке, который соответствует вхождениям в соответствии с данное выражение регулярного выражения в аргументе и возвращает согласованные значения или nil
. !!
преобразует результат метода match
в эквивалентный булев. String
- это исправление обезьяны, которое ничего не меняет в существующих функциях String, но добавляет еще один метод с именем integer?
для любого объекта String.