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

17

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

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

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

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

    
задан Cory Regan 27.01.2013 в 20:25
источник

2 ответа

31

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

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

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

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

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

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

    
ответ дан Andrew Marshall 27.01.2013 в 21:36
источник
11

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

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

def letter?(lookAhead)
  lookAhead =~ /[A-Za-z]/
end
    
ответ дан PinnyM 27.01.2013 в 20:30
источник