我试图用RUBY编写一个函数,以确定给定的字符串是否是有效的车牌。有效的车牌有以下格式:3个大写字母,后面跟着一个破折号,后面跟着4个数字。例:HES-2098.
我编写了以下函数,但需要一些模式匹配的帮助。
def liscence()
plate = "HES-2098"
plateNo = plate.upcase
if(plate.length == 8)
if(plate == plateNo)
if(/\A-Z\A-Z\A-Z\-\d{4}/.match(plate))
puts "valid"
else
puts "invalid"
end
else
puts "First 3 letter must be uppercase"
end
else
puts "Only 8 char long"
end
end
liscence()发布于 2016-08-10 14:24:43
您的regex没有工作,因为\A匹配一个字符串开始位置,该位置只能是一个字符串中的一个(并且您有三个)。要匹配大写的ASCII字母,可以使用[A-Z]字符类。
您可以使用
if /\A[A-Z]{3}-[0-9]{4}\z/ =~ plate请参阅regex和红宝石演示。
模式细节
\A -字符串的开始(不是行,如^)锚点[A-Z]{3} -由于使用了限制量词{n},所以大写的ASCII字母(来自字符类中的[A-Z]范围)- -文字连字符(没有必要在字符类之外转义)[0-9]{4} -精确4个ASCII位数\z -字符串锚点的末尾(而不是与行尾匹配的$ )发布于 2016-08-10 14:02:30
plate[/\A[A-Z]{3}-\d{4}\z/] ? 'valid' : 'invalid'https://stackoverflow.com/questions/38875588
复制相似问题