проверка строковых значений - PullRequest
0 голосов
/ 05 апреля 2011

Я хотел бы проверить, является ли строковое значение переменной числовой строкой (например, «3.2», «1») или алфавитной строкой (например, «abc»), есть ли простой способ сделать это в ruby ​​или Rails 3

Ответы [ 5 ]

7 голосов
/ 05 апреля 2011

Я бы использовал Float ().

def numeric?(object)
  true if Float(object) rescue false
end
1 голос
/ 05 апреля 2011

Вы можете использовать регулярные выражения, чтобы помочь вам в этом.

str = "abc"
# first regex checks for character string, second regex checks for floating point number
if not str.empty? and str =~ /^[a-z]+$/i or str =~ /^[-+]?[0-9]*\.?[0-9]*$/ then
  # this is a match
else
  # no match
end

Я не полностью протестировал эти регулярные выражения - вам нужно убедиться, что они соответствуют вашим потребностям.

1 голос
/ 05 апреля 2011

Вы можете добавить метод is_numeric? к строковому классу:

class String
  def is_numeric?
    true if Float(self) rescue false
  end
end

p "123".is_numeric? # true
p "abc".is_numeric? # false

Использование Float() вместо регулярного выражения обрабатывает некоторые странные случаи, которые вы, возможно, не захотите считать «числовыми», например +123 или -.3.

0 голосов
/ 05 апреля 2011

Реализации, использующие Kernel#Float, ожидают и спасают исключение, которое является медленным и плохим дизайном.Я бы предпочел:

class String
  def is_numeric?  
    string.to_f.to_s == string ||
      string.to_i.to_s == string
  end
end
0 голосов
/ 05 апреля 2011
string == /\d+\.?\d+/ ? "Numbers" : "Letters"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...