2010-02-28 141 views
9

我正在查看一个字符串是否全部是Rails中的大写字母。 我该怎么做呢?检查一个字符串是否是Rails中的全部大写字段

我正在写我自己的自定义复数帮助器方法,我会传递像“WORD”这样的词,有时候是“Word” - 我想测试我的单词是否全部大写,所以我可以返回“WORDS” - 与如果单词是复数,则最后是首字母“S”(对比“WORDs”)。

谢谢!

+0

[我如何检查一个词已经在Ruby中全部大写?(HTTP的可能重复://计算器.com/questions/8529595/how-can-i-check-a-word-is-already-all-uppercase-in-ruby) – philant 2015-05-29 09:15:07

+0

啊不,这个问题之前被问过,所以如果有什么问题应该作为这一个的副本关闭。 – 2015-06-01 07:03:05

+0

@philant - 您不应该投票以双方重复的形式结束......只是从一边进行投票。 – 2015-06-01 07:03:47

回答

23

这样做:

str == str.upcase 

E.g:

str = "DOG" 
str == str.upcase # true 
str = "cat" 
str == str.upcase # false 

因此,对于您的方案的代码将是:

# In the code below `upcase` is required after `str.pluralize` to transform 
# DOGs to DOGS 
str = str.pluralize.upcase if str == str.upcase 
+0

谢谢!那工作:) – 2010-02-28 21:46:05

+0

它是如此美丽的习惯!请记住,对于非常长的字符串,它会招致时间和内存的处罚,因为它需要分配另一个字符串并且两次遍历原始字符串。基于正则表达式的解决方案更为优化。 – skalee 2014-11-19 21:33:11

2

或者这样:

str =~ /^[A-Z]+$/ 

例如:

"DOG" =~ /^[A-Z]+$/ # 0 
"cat" =~ /^[A-Z]+$/ # nil 
+1

当字符串中有A-Z以外的东西时不起作用。例如DÖG或CÄT或DOG123。 – Priit 2010-03-01 07:17:03

+1

确实如此。如果国际化是个问题,'str == str.upcase'可能会更好,但这取决于'upcase'的定义。在我的系统上,''cooperation“.upcase'是''COOPERERATION'',这并没有什么帮助。 Ruby 1.9更具编码意识;对于那些在1.8版本中,有Unicode的宝石:http://rubygems.org/gems/unicode – 2010-03-01 13:07:17

+0

不正确的锚,除了上述问题,它会匹配字符串像“”\ nUPPER“' – skalee 2014-11-19 21:26:57

2

由于正则表达式,它非常简单。只需使用[[:upper:]]字符类,它允许所有大写字母,包括但不限于ASCII-8中的字母。

根据什么做的正是你需要:

# allows upper case characters only 
/\A[[:upper:]]*\Z/ =~ "YOURSTRING" 

# additionally disallows empty strings 
/\A[[:upper:]]+\Z/ =~ "YOURSTRING" 

# also allows white spaces (multi-word strings) 
/\A[[:upper:]\s]*\Z/ =~ "YOUR STRING" 

# allows everything but lower case letters 
/\A[^[:lower:]]*\Z/ =~ "YOUR 123_STRING!" 

红宝石DOC:http://www.ruby-doc.org/core-2.1.4/Regexp.html

相关问题