How can I check a word is already all uppercase in Ruby?
我想知道一个词是否都是大写的。它也可能包括数字。
例子:
1 2 | GO234 => yes Go234 => no |
您可以将字符串与相同的字符串进行比较,但使用大写:
1 2 | 'go234' == 'go234'.upcase #=> false 'GO234' == 'GO234'.upcase #=> true |
希望这有帮助
1 2 3 4 5 6 7 8 9 10 11 | a ="Go234" a.match(/\p{Lower}/) # => #<MatchData"o"> b ="GO234" b.match(/\p{Lower}/) # => nil c ="123" c.match(/\p{Lower}/) # => nil d ="μ" d.match(/\p{Lower}/) # => #<MatchData"μ"> |
所以当匹配结果为零时,它已经是大写的了,否则它是小写的。
谢谢,@mu说得太短了,我们应该用/p小写/来匹配非英文小写字母。
我正在使用@peterwong提供的解决方案,只要您要检查的字符串不包含任何特殊字符(如注释中所指出的),它就非常有效。
但是,如果您想将它用于"berall"这样的字符串,只需添加这个轻微的修改:
1 2 3 4 5 6 7 8 9 10 11 12 13 | utf_pattern = Regexp.new("\\p{Lower}".force_encoding("UTF-8")) a ="Go234" a.match(utf_pattern) # => #<MatchData"o"> b ="GO234" b.match(utf_pattern) # => nil b ="ü?234" b.match(utf_pattern) # => nil b ="über234" b.match(utf_pattern) # => #<MatchData"b"> |
玩得高兴!
您可以比较string和string.upcase是否相等(如jcorc所示)。
1 2 3 4 | irb(main):007:0> str ="Go234" =>"Go234" irb(main):008:0> str == str.upcase => false |
或
你可以打电话给arg.upcase!检查是否为零。(但这将修改原始参数,因此您可能需要创建一个副本)
1 2 3 4 | irb(main):001:0>"GO234".upcase! => nil irb(main):002:0>"Go234".upcase! =>"GO234" |
更新:如果您希望它适用于Unicode。(多字节),那么字符串upcase将不起作用,您需要这个问题中提到的unicode-util gem