我怎样才能检查一个单词在Ruby中已经全部大写了?

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