有可能知道字符串是否在base64中编码?

Rod*_*eno 2 base64 qr-code ios swift

就那么简单.

我正在制作一个用户必须扫描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 */

    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*n R 11

如果字符串包含有效的Base-64,则无需提前检查.您只需检查返回值,即nil输入未被识别为有效Base-64时:

if let decodedData = NSData(base64EncodedString: someString, options: nil) {
    // ...
} else {
    println("Not Base64")
}
Run Code Online (Sandbox Code Playgroud)

Swift 4的更新:

if let decodedData = Data(base64Encoded: someString) {
    // ...
} else {
    print("Not Base64")
}
Run Code Online (Sandbox Code Playgroud)