2015-03-03 26 views
2

就這麼簡單。有可能知道一個字符串是否在base64中編碼?

我正在製作一個應用程序,用戶必須掃描一個QR碼(基本上是一個base64編碼的字符串),有沒有什麼方法可以驗證該字符串是在base64編碼之前解碼並遵循流程應用?

我的代碼將負責是:

func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) { 

    if metadataObjects == nil || metadataObjects.count == 0 { 
     qrCodeFrameView?.frame = CGRectZero 
     return 
    } 

    let metadataObj = metadataObjects[0] as AVMetadataMachineReadableCodeObject 

    if metadataObj.type == AVMetadataObjectTypeQRCode { 
     let barCodeObject = videoPreviewLayer?.transformedMetadataObjectForMetadataObject(metadataObj as AVMetadataMachineReadableCodeObject) as AVMetadataMachineReadableCodeObject 
     qrCodeFrameView?.frame = barCodeObject.bounds 

     if metadataObj.stringValue != nil /* Verify that string is base 64 before continue */ { 
      let decodedData = NSData(base64EncodedString: metadataObj.stringValue, options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters) 
      let decodedString = NSString(data: decodedData!, encoding: NSUTF8StringEncoding) 
      println(decodedString) 
     } 

     /* More code */ 

    } 
} 

回答

7

如果字符串包含有效的 Base-64,則不需要檢查。你只需要檢查返回值,這是nil當輸入無法識別爲有效的Base-64:

if let decodedData = NSData(base64EncodedString: someString, options: nil) { 
    // ... 
} else { 
    println("Not Base64") 
} 
2

您可以使用正則表達式來檢查字符串匹配base64編碼或沒有,像這樣:

​​

在base64編碼,字符集爲[AZ,az,0-9和+ /],如果休息長度小於4,填寫'='字符。

^([A-Za-z0-9+/]{4})*表示字符串以0或更多的base64組開始。

([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)意味着字符串必須[A-Za-z0-9+/]{4}[A-Za-z0-9+/]{3}=[A-Za-z0-9+/]{2}==

基本規則結束的3種形式是:

  • 檢查長度是4個字符
  • 檢查每一個字符的多是在集AZ,az,0-9,+,/除了 用於填充末端,即0,1或2'='字符
0

請使用For Base64 Validation

否則加入該吊艙在項目pod 'SwiftValidators'

示例

if Validators.isBase64()("mnbzcxmnbnzzxmnb==") 
{ 
print("Validate Yes") 
} 
else 
{ 
print("Not Validate") 
} 
相關問題