【发布时间】:2011-10-30 21:48:42
【问题描述】:
有谁知道一个jQuery插件可以检查文本是否是随机编码的base64?我希望能够解码 base64 字符串,但前提是字符串被编码为开头。我看到了几个可以编码和解码的脚本,但我确实有一个可以检查字符串是否被编码。
这样的事情存在吗?
【问题讨论】:
有谁知道一个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)
}
}
【讨论】: