我正在编写密码验证器,我有2个要求:
当我检查大写字母时,我会执行以下操作:
if letter == letter.upcase
# 'a' == 'A' false
# 'A' == 'A' true
问题是某些特殊字符被检测为大写数字,例如:
'#' == 3.upcase # returns true
所以它放弃了我的得分。如何区分实际的大写字母和数字+变换成特殊符号之类的东西?
答案 0 :(得分:2)
您可以尝试测试您的角色是否是一封信。您可以使用正则表达式:
def is_upcase?(character)
# If it's a character from a to z
if character =~ /[a-zA-Z]/
character == character.upcase
else
# Do whatever you want with it
false
end
end
可能有一些宝石或库弄乱了你的upcase
方法(或者你使用的是旧的或未知的ruby版本)。 '3'.upcase
应该返回'3'
,而不是'#'
。
答案 1 :(得分:0)
两种方法:
SPECIAL_CHARS = Regexp.escape "#$%"
#=> "\\#\\$%"
<强>#1 强>
def both?(str)
str.index(/[A-W]/) && str.index(/[#{SPECIAL_CHARS}]/) ? true : false
end
both? "aAb$," #=> true
both? "a$bA," #=> true
both? "a$ba," #=> false
both? "abAB," #=> false
或
!!!str.index(/[A-W]/) && str.index(/[#{SPECIAL_CHARS}]/))
<强>#2 强>
def both?(str)
str =~ /[A-W].*[#{SPECIAL_CHARS}]|[#{SPECIAL_CHARS}].*[A-W]/ ? true : false
end
both? "aAb$," #=> true
both? "a$bA," #=> true
both? "a$ba," #=> false
both? "abAB," #=> false
(或!!str =~ /.../
)