我想解码base64编码的字符串,然后将其存储在我的数据库中.如果输入不是base64编码,我需要抛出一个错误.如何检查字符串是否为base64编码?
xua*_*uan 226
您可以使用以下正则表达式来检查字符串是否为base64编码:
^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$
Run Code Online (Sandbox Code Playgroud)
在base64编码中,字符集是[A-Z, a-z, 0-9, and + /]
.如果剩余长度小于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}==
.
zih*_*oyu 47
如果您使用的是Java,那么您实际上可以使用commons-codec库
import org.apache.commons.codec.binary.Base64;
String stringToBeChecked = "...";
boolean isBase64 = Base64.isArrayByteBase64(stringToBeChecked.getBytes());
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 44
那么你可以:
如果您期望它将是base64,那么您可以使用平台上可用的任何库来尝试将其解码为字节数组,如果它不是有效的基数64则抛出异常.这取决于您的平台,当然.
Sun*_*mar 13
尝试这样的PHP5
//where $json is some data that can be base64 encoded
$json=some_data;
//this will check whether data is base64 encoded or not
if (base64_decode($json, true) == true)
{
echo "base64 encoded";
}
else
{
echo "not base64 encoded";
}
Run Code Online (Sandbox Code Playgroud)
Phi*_*ppe 11
从Java 8开始,您只需使用java.util.Base64来尝试解码字符串:
String someString = "...";
Base64.Decoder decoder = Base64.getDecoder();
try {
decoder.decode(someString);
} catch(IllegalArgumentException iae) {
// That string wasn't valid.
}
Run Code Online (Sandbox Code Playgroud)
小智 6
var base64Rejex = /^(?:[A-Z0-9+\/]{4})*(?:[A-Z0-9+\/]{2}==|[A-Z0-9+\/]{3}=|[A-Z0-9+\/]{4})$/i;
var isBase64Valid = base64Rejex.test(base64Data); // base64Data is the base64 string
if (isBase64Valid) {
// true if base64 formate
console.log('It is base64');
} else {
// false if not in base64 formate
console.log('it is not in base64');
}
Run Code Online (Sandbox Code Playgroud)
小智 6
尝试这个:
public void checkForEncode(String string) {
String pattern = "^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(string);
if (m.find()) {
System.out.println("true");
} else {
System.out.println("false");
}
}
Run Code Online (Sandbox Code Playgroud)
Base64有许多变体,因此只需考虑确定您的字符串是否类似于您期望处理的变体。因此,您可能需要根据索引和填充字符(即+
, /
, =
)调整下面的正则表达式。
class String
def resembles_base64?
self.length % 4 == 0 && self =~ /^[A-Za-z0-9+\/=]+\Z/
end
end
Run Code Online (Sandbox Code Playgroud)
用法:
raise 'the string does not resemble Base64' unless my_string.resembles_base64?
Run Code Online (Sandbox Code Playgroud)
请检查IF字符串的长度是4 Aftwerwards使用这个表达式来确保多的所有字符的字符串中的数据为base64字符。
\A[a-zA-Z\d\/+]+={,2}\z
如果您使用的库添加了一个换行符,以观察每行最多76个字符,请用空字符串替换它们。
无法检查字符串是否为 base64 编码。只能验证该字符串是否为 base64 编码的字符串格式,这意味着它可能是由 base64 编码生成的字符串(要检查该字符串是否可以针对正则表达式进行验证或可以使用库,许多这个问题的其他答案提供了检查这一点的好方法,所以我不会详细介绍)。
例如,字符串flow
是有效的 base64 编码字符串。但无法知道它是否只是一个简单的字符串,一个英文单词flow
,还是base 64编码的字符串~Z0
归档时间: |
|
查看次数: |
210945 次 |
最近记录: |