web-dev-qa-db-fra.com

Ruby: Comment savoir si un caractère est une lettre ou un chiffre?

Je viens de commencer à bricoler avec Ruby plus tôt cette semaine et je suis tombé sur quelque chose que je ne sais pas trop comment coder. Je convertis un scanner écrit en Java into Ruby pour un devoir de classe, et je suis passé à cette section:

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

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

lookAhead est un seul caractère extrait de la chaîne (se déplaçant d'un espace à chaque fois qu'il boucle) et ces deux méthodes déterminent s'il s'agit d'un caractère ou d'un chiffre, renvoyant le type de jeton approprié. Je n'ai pas pu comprendre un Ruby équivalent à Character.isLetter() et Character.isDigit().

22
Cory Regan

Utilisez une expression régulière qui correspond aux lettres et chiffres:

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

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

Celles-ci sont appelées expressions de support POSIX, et leur avantage est que les caractères unicode sous la catégorie donnée correspondront. Par exemple:

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

Vous pouvez en lire plus dans Documents de Ruby pour les expressions régulières .

44
Andrew Marshall

La manière la plus simple serait d'utiliser une expression régulière:

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

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