2011-12-16 38 views

回答

33

您可以用相同的字符串,但在大寫的字符串比較:

'go234' == 'go234'.upcase #=> false 
'GO234' == 'GO234'.upcase #=> true 

希望這有助於

+2

這隻適用於ASCII。從[精細手冊](http://ruby-doc.org/core-1.9.3/String.html#method-i-upcase):「該操作是區域設置不敏感的字符」a「到」z「注:案例更換僅在ASCII區域有效「。 – 2011-12-16 04:14:40

+0

對於不ASCII碼嘗試.mb_chars,例如:'ТАК'=='так'.mb_chars.upcase.to_s – nub 2013-03-18 17:22:59

+0

簡短和智能解決方案 – Ravindra 2015-06-24 10:43:52

23
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 {下}來代替非英文小寫字母。

2

你既可以比較平等的字符串和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" 

更新:如果你想這對Unicode的工作..(多字節),然後串#upcase不會工作,你需要在上面提到的unicode-util gem this SO question

3

我使用的是@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"> 

玩得開心!

相關問題