Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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

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