Руби: как узнать, является ли символ буквой или цифрой?

Я только начал возиться с Руби в начале этой недели, и я столкнулся с чем-то, что я не совсем знаю, как кодировать. Я конвертирую сканер, который был написан на Java в Ruby для назначения класса, и я добрался до этого раздела:

if (Character.isLetter(lookAhead))
{      
    return id();
}

if (Character.isDigit(lookAhead))
{
    return number();
}

lookAhead - Это один символ, выбранный из строки (перемещающийся на одно пространство каждый раз, когда он проходит), и эти два метода определяют, является ли он символом или цифрой, возвращая соответствующий Тип маркера. Я не удалось выяснить рубиновый эквивалент Character.isLetter() и Character.isDigit().

2 ответов


используйте регулярное выражение, которое соответствует буквам и цифрам:

def letter?(lookAhead)
  lookAhead =~ /[[:alpha:]]/
end

def numeric?(lookAhead)
  lookAhead =~ /[[:digit:]]/
end

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

'ñ' =~ /[A-Za-z]/    #=> nil
'ñ' =~ /\w/          #=> nil
'ñ' =~ /[[:alpha:]]/   #=> 0

вы можете прочитать больше в документы Ruby для регулярных выражений.


самый простой способ - использовать регулярное выражение:

def numeric?(lookAhead)
  lookAhead =~ /[0-9]/
end

def letter?(lookAhead)
  lookAhead =~ /[A-Za-z]/
end