11
votes

Vérifiez si une chaîne est toutes des capitales dans les rails

Je cherche à vérifier si une chaîne est toutes des capitales dans des rails. Comment allais-je faire ça?

J'écris ma propre méthode d'assistant de pluralisation personnalisée et je voudrais passer des mots comme "mot" et parfois "mot" - je veux tester si ma mot est toutes des casquettes afin que je puisse retourner "mots" - avec un la capitale "s" à la fin si le mot est pluriel (vs "mots").

merci!


4 commentaires

duplicaté possible de Comment puis-je vérifier un Le mot est déjà tous en majuscule dans Ruby?


Ah Non, cette question a été posée avant que l'une, donc si quelque chose qui question devrait être fermé comme dup de celui-ci.


@philant - Vous ne devez pas voter à proximité comme formulaire en double forme des deux côtés ... juste d'un côté.


@TaryNeast ouais je sais, mais je ne pouvais pas l'annuler. Merci.


3 Réponses :


25
votes

Faites ceci:

# In the code below `upcase` is required after `str.pluralize` to transform 
# DOGs to DOGS
str = str.pluralize.upcase if str == str.upcase


1 commentaires

C'est tellement joliment idiomatique! N'avez-vous à l'esprit que pour les très longues chaînes, cela entraînera des pénalités de temps et de mémoire, car elles nécessitent une autre chaîne et une autre chaîne et traversez-la deux fois. Les solutions régulières-expressions sont plus optimales.



2
votes

ou ceci: xxx

E.g.: xxx


3 commentaires

Ne fonctionne pas lorsque la chaîne a autre chose que A-Z dedans. Dög ou cät ou Dog123 par exemple.


Plutôt vrai. Si l'internationalisation est un problème, le str == str.uppcase pourrait mieux fonctionner, mais cela dépend de la définition de upcase . Sur mon système, "COÖPERATION" .UPCASE est "COÖPERATION" , qui n'aide pas vraiment. Ruby 1.9 est plus conscient de l'encodage; Pour ceux qui sont sur 1,8, il y a le gemme Unicode: rubygems.org/gems/unicode


Ancrages inappropriés, mis à part des problèmes susmentionnés, il correspondra aux chaînes telles que "inférieur \ Nupper"



3
votes

Grâce aux expressions régulières, c'est très simple. Il suffit d'utiliser [[: supérieure:]]] classe de caractères qui permet toutes les lettres majuscules, y compris mais non limitées à celles présentes dans ASCII-8.

Selon votre besoin exactement: xxx

ruby ​​doc: http : //wwww.ruby-doc.org/core-2.1.4/regexp.html


0 commentaires