Ruby有效的车牌正则表达式

时间:2016-08-10 13:59:52

标签: ruby regex pattern-matching

我正在尝试在RUBY中编写一个函数来确定给定的字符串是否是有效的牌照。有效牌照的格式如下:3个大写字母,后跟破折号,后跟4个数字。 EX: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()

2 个答案:

答案 0 :(得分:2)

func chooseAlert(){


        let alert = UIAlertController(title: "Upload Image", message: "Choose Source For Image.", preferredStyle: .ActionSheet)

        let cameraAction = UIAlertAction(title: "Take Photo", style: .Default, handler: { (action:UIAlertAction) -> Void in

                    dispatch_async(dispatch_get_main_queue())
            {
//                self.performSelector(#selector(self.useCamera), withObject: nil, afterDelay: 1.0)
                self.useCamera()
            }
        })

        let cameraRollAction = UIAlertAction(title: "Use Photo", style: .Default, handler: { (action:UIAlertAction) -> Void in

            dispatch_async(dispatch_get_main_queue())
            {
                self.useCameraRoll()
            }
        })

        let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel){
            (action) in
            print(action)
        }

        alert.addAction(cameraAction)
        alert.addAction(cameraRollAction)
        alert.addAction(cancelAction)
        presentViewController(alert, animated: true, completion: nil)

   }

答案 1 :(得分:2)

你的正则表达式不起作用,因为\A匹配一个字符串起始位置,该位置只能是一个字符串中的一个(并且你有三个)。要匹配大写的ASCII字母,您可以使用[A-Z]字符类。

您可以使用

if /\A[A-Z]{3}-[0-9]{4}\z/ =~ plate

请参阅regexRuby演示。

模式详情

  • \A - 字符串的开头(不是行,与^一样)锚点
  • [A-Z]{3} - 正好为3(因为使用了限制量词{n})大写ASCII字母(来自字符类中的[A-Z]范围)
  • - - 一个字面连字符(不必在字符类之外将其转义)
  • [0-9]{4} - 正好4个ASCII数字
  • \z - 字符串锚点的末尾(不是与行尾相匹配的$