有没有人知道一个jQuery插件可以随机检查文本是否是base64编码的?我想要解码base64字符串,但只有在字符串已被编码的情况下才能这样做。我看到有几个脚本可以进行编解码,但我真正需要的是能够检查字符串是否已经被编码的插件。
这种插件存在吗?
一定要使用jQuery插件吗?只需使用简单的JavaScript正则表达式匹配:
var base64Matcher = new RegExp("^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$");
// ...
if (base64Matcher.test(someString)) {
// It's likely base64 encoded.
} else {
// It's definitely not base64 encoded.
}
这个正则表达式模式取自于这个问题:RegEx to parse or validate Base64 data。
对于我来说,上面的答案没有考虑字符串末尾等号(=或==)的填充。我已经更新了查询,以下内容对我有效。
var base64Matcher = new RegExp("^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})([=]{1,2})?$");
我知道这可能有点晚回答,但这是我目前想到的。在这种情况下,我使用jQuery中的{match}。这适用于图像或文本。希望这可以帮助到您。
var sSampleBase64Text = 'data:text/plain;base64,MSkgTG9naW4gRGV0YWlscwogPj4gdGNfYWRtaW5fYXllZQogPj4gdHdpbmtsZXMyMnRo';
var mCheckMatchResult = sSampleBase64Text.match(/^(?:[data]{4}:(text|image|application)\/[a-z]*)/);
var sAlertMessage = 'Valid base 64 encode string';
if (mCheckMatchResult === null || mCheckMatchResult.length <= 0) {
sAlertMessage = 'Not a valid base 64 encode string';
}
$('.result').append('<p>' + sAlertMessage + '</p>');
刚遇到这个问题,找到了一个可能有用的解决方案:
function safeBase64Encode(testString) {
try {
// If it's encoded, it will look the same in atob(btoa()) and btoa(atob())
let isEncoded = btoa(atob(testString)) == atob(btoa(testString))
if ( isEncoded ) {
return testString
}
} catch (err) {
// If we get an error like it's not a valid encoding, you gotta encode it.
return btoa(testString)
}
}