Ruby 如何检查一个单词是否已全部大写?

Ruby 如何检查一个单词是否已全部大写?,ruby,Ruby,我希望能够检查一个单词是否已经全部大写。它还可能包括数字 例如: GO234 => yes Go234 => no 您可以将该字符串与相同的字符串进行比较,但应使用大写: 'go234' == 'go234'.upcase #=> false 'GO234' == 'GO234'.upcase #=> true a=“Go234” a、 匹配(/\p{Lower}/)#=># b=“GO234” b、 匹配(/\p{Lower}/)#=>nil c=“123” c

我希望能够检查一个单词是否已经全部大写。它还可能包括数字

例如:

GO234 => yes
Go234 => no

您可以将该字符串与相同的字符串进行比较,但应使用大写:

'go234' == 'go234'.upcase  #=> false
'GO234' == 'GO234'.upcase  #=> true
a=“Go234”
a、 匹配(/\p{Lower}/)#=>#
b=“GO234”
b、 匹配(/\p{Lower}/)#=>nil
c=“123”
c、 匹配(/\p{Lower}/)#=>nil
d=“µ”
d、 匹配(/\p{Lower}/)#=>#
因此,当匹配结果为nil时,它已经是大写的,否则某些内容是小写的


感谢@mu太短,我们应该使用/\p{Lower}/来匹配非英语小写字母。

您可以比较string和string.upcase是否相等(如JCorc所示)

你可以叫arg.upcase!检查是否为零。(但这将修改原始参数,因此您可能需要创建副本)


更新:如果您希望此功能适用于unicode。。(多字节),然后字符串#upcase将不起作用,您需要

中提到的unicode util gem,我正在使用@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">
utf_pattern=Regexp.new(\\p{Lower}).force_编码(“utf-8”))
a=“Go234”
a、 匹配(utf#U模式)#=>#
b=“GO234”
b、 匹配(utf#U模式)#=>零
b=“ÜÖ234”
b、 匹配(utf#U模式)#=>零
b=“Über234”
b、 匹配(utf#U模式)#=>#

玩得开心

我不知道ruby,但我肯定有类似于
ToUpper
的东西。这个函数检查实际字符串。虽然我怀疑这会很快在非英语字母表上中断。。。ruby REs是否有更多特定于Unicode的支持?您可能需要1.9版的
/\p{Lower}/
。例如,比较
“µ”.match(/[a-z]/)
“µ”.match(/\p{Lower}/)
。这([a-z])假设只有a-z字符可以是小写的(例如英语字母表),但不能是类似于(俄语Щ的小写)。最好将其用于这类事情。+1用于学习您的经验教训并为子孙后代提供正确的信息。
upcase
方法仅适用于ASCII:这仅适用于ASCII。从:“该操作不区分区域设置,仅影响字符“a”到“z”。注意:大小写替换仅在ASCII区域有效。”。对于非ASCII try.mb_字符,例如:'titАК'='titаkak'。mb_字符.upcase.to_sshort和smart solutionError,
upcase
方法仅适用于ASCII,因此它将丢失小写字母,如µ(希腊文)和ê(西里尔文)。@muistooshort-已更新。海报上没有表明他想让这个应用于unicode。所以假设最简单的情况。。。无论如何更新!
irb(main):007:0> str = "Go234"
=> "Go234"
irb(main):008:0> str == str.upcase
=> false
irb(main):001:0> "GO234".upcase!
=> nil
irb(main):002:0> "Go234".upcase!
=> "GO234"
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">