检查字符串是否包含小字母和大字母

时间:2017-10-23 15:54:51

标签: ruby

我想检查字符串中是否有小字母和大字母

a.to_s.each_byte do |s|
   if s >= 65 && s <= 90
      big = true
   elsif s >= 95 && s <= 122
      small = true
   end
end

是否可以用最短的形式写出来?

4 个答案:

答案 0 :(得分:3)

str = a.to_s
big = true if str =~ /[A-Z]/ 
small = true if str =~ /[a-z]/

答案 1 :(得分:3)

如果你坚持使用英语,那么你可以尝试这样的事情:

if a.to_s =~ /[a-z]/ and a.to_s =~ /[A-Z]/
    puts 'f'
else
    puts 'p'
end

但是如果您的代码需要能够处理其他语言的字母表,那么您应该使用:

if a.to_s =~ /[[:lower:]]/ and a.to_s =~ /[[:upper:]]/
    puts 'f'
else
    puts 'p'
end

答案 2 :(得分:1)

虽然我更喜欢来自@axiac和@cmramseyert的正则表达式解决方案,但这是一种可以实现工作的原始实现方式:

[65...90,95...122].all? do |range|
  a.to_s.each_byte.any? { |byte| range.include? byte }
end

在伪代码中:

  

对于所有范围,任何字节是否属于该范围内?

答案 3 :(得分:0)

这是“最短形式”的候选人。如果同时存在小写和大写字母,则在小写字母后面有一个大写字母,反之亦然。

str.match? /\p{Ll}\p{Lu}|\p{Lu}\p{Ll}/