Quiero poder verificar si una palabra YA está en mayúsculas. Y también podría incluir números.¿Cómo puedo verificar que una palabra ya esté en mayúscula en Ruby?
Ejemplo:
GO234 => yes
Go234 => no
Quiero poder verificar si una palabra YA está en mayúsculas. Y también podría incluir números.¿Cómo puedo verificar que una palabra ya esté en mayúscula en Ruby?
Ejemplo:
GO234 => yes
Go234 => no
se puede comparar la secuencia con la misma cadena, pero en mayúsculas:
'go234' == 'go234'.upcase #=> false
'GO234' == 'GO234'.upcase #=> true
Esperanza esto ayuda
Esto solo funciona para ASCII. Del [manual fino] (http://ruby-doc.org/core-1.9.3/String.html#method-i-upcase): "La operación es insensible a la configuración regional, solo caracteres" a "a" z " se ven afectados. Nota: el reemplazo del caso es efectivo solo en la región ASCII ". –
Para no ASCII pruebe .mb_chars, por ejemplo: 'ТАК' == 'так'.mb_chars.upcase.to_s – nub
solución corta e inteligente – Ravindra
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 "µ">
Por eso, cuando el resultado del partido es nula , ya está en mayúsculas, de lo contrario, algo está en minúsculas.
Gracias @mu es demasiado breve mencionar que deberíamos usar/\ p {Lower}/en su lugar para hacer coincidir letras minúsculas que no sean en inglés.
Aunque sospecho que esto se romperá rápidamente en los alfabetos no ingleses ... ¿tienen los RE ruby ¿Alguna ayuda más específica de Unicode? –
No creo que haya problema ya que solo coincide con minúsculas de la a a la z. Hice una prueba rápida en mi irb (ruby 1.9.2 p270) y funciona bien :) – PeterWong
Probablemente quieras '/ \ p {Lower} /' con 1.9. Compare ''μ'.match (/ [a-z] /)' y '' μ'.match (/ \ p {Lower} /)' por ejemplo. –
Usted podría comparar la secuencia y string.upcase por la igualdad (como se muestra por JCorc ..)
irb(main):007:0> str = "Go234"
=> "Go234"
irb(main):008:0> str == str.upcase
=> false
O
que se podría llamar arg.upcase! y verifica si no. (Pero esto va a modificar argumento original, por lo que es posible que tenga que crear una copia)
irb(main):001:0> "GO234".upcase!
=> nil
irb(main):002:0> "Go234".upcase!
=> "GO234"
Actualización: Si quieres que esto funcione para Unicode .. (multi-byte), a continuación, la cadena # upcase no lo hará trabajo, necesitarías la gema unicode-util mencionada en this SO question
Incorrecto, el método 'upcase' solo funciona para ASCII, por lo que se perderán letras minúsculas como μ (griego) y щ (cirílico). –
@muistooshort - actualizado. El cartel no dio ninguna indicación de que quisiera que esto funcione para Unicode. Así que asumió el caso más simple ... de todos modos actualizado! – Gishu
Estoy usando la solución de @PeterWong y funciona muy bien siempre que la cadena con la que estás comprobando no contenga ningún carácter especial (como en los comentarios).
Sin embargo, si desea utilizarlo para cadenas como "Überall", sólo tiene que añadir esta ligera modificación:
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">
Que se diviertan!
No sé ruby, pero estoy seguro de que hay algo así como 'ToUpper'. El control de la cadena real contra esta función. – Matthias