我希望能够检查一个单词是否已经全部大写。它也可能包括数字。
示例:
GO234 => yes
Go234 => no
您可以将字符串与相同的字符串进行比较,但大写:
'go234' == 'go234'.upcase #=> false
'GO234' == 'GO234'.upcase #=> true
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 "µ">
因此,当匹配结果为nil时,它已经是大写字母,否则某些东西是小写字母。
谢谢@mu太简短了,我们应该使用/ \ p {Lower} /来匹配非英语的小写字母。
我正在使用@PeterWong的解决方案,只要您要检查的字符串不包含任何特殊字符(如注释中指出的那样),它就可以很好地工作。
但是,如果您想将其用于“Überall”之类的字符串,只需添加以下微小修改:
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所示。)
irb(main):007:0> str = "Go234"
=> "Go234"
irb(main):008:0> str == str.upcase
=> false
OR
您可以致电arg.upcase!并检查是否为零。 (但这将修改原始参数,因此您可能必须创建一个副本)
irb(main):001:0> "GO234".upcase!
=> nil
irb(main):002:0> "Go234".upcase!
=> "GO234"
更新:如果您希望它适用于uni ..(多字节),则string#upcase将不起作用,您需要this SO question中提到的unicode-util gem>