我想检查字符串中是否有小字母和大字母
a.to_s.each_byte do |s|
if s >= 65 && s <= 90
big = true
elsif s >= 95 && s <= 122
small = true
end
end
是否可以用最短的形式写出来?
答案 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}/