Руби: как узнать, является ли символ буквой или цифрой?
Я только начал возиться с Руби в начале этой недели, и я столкнулся с чем-то, что я не совсем знаю, как кодировать. Я конвертирую сканер, который был написан на 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