JAVA判断字符串是否为base64编码

百度一圈,不难发现base64编码之后的字符串具有哪些特点:

  • 字符串只可能包含A-Z,a-z,0-9,+,/,=字符
  • 字符串长度是4的倍数
  • 只会出现在字符串最后,可能没有或者一个等号或者两个等号
String inputStr="Test Base64 string";
String base64Pattern = "^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$";
Boolean isLegal = inputStr.matches(base64Pattern);
if (!isLegal) {
    System.out.println("输入的不是Base64编码的字符串。");
     }

上述表达中“base64Pattern ”为正则表达的匹配模板。
“^”:表示正则匹配的开始;
“[A-Za-z0-9+/]”:匹配“A-Z,a-z,0-9,+,/,=”等字符;
“{4}”:字符重复出现次数为4的配属
“([A-Za-z0-9+/]{4})”:表示等字符出现次数或字符串长度是4的倍数;
“*”:表示后续出现的字符串重复出现零次或更多次;
“|”:表示或的关系
“([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)”:表示同时匹配三种表达式,出现一次即为匹配成功;
“$”:表示匹配结束;

上述直接匹配字符串的方式判断是否为base64编码的方式,图片类型的Base64编码串可能会判断失败。
因为jpg等格式的图片采用Base64编码结果一般形式为:

// base64格式的图片
String base64Image = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQ......."

会出现表示字符串信息的字符串头。因而,判断字符串是否为base64格式的图片时,应去掉字符串头再进行匹配。

String inputStr="Test Base64 Image";
String base64Pattern = "^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$";
 if (inputStr.lastIndexOf(",") != -1) {
	  inputStr= inputStr.substring(inputStr.lastIndexOf(",") + 1);
}
Boolean isLegal = inputStr.matches(base64Pattern);
if (!isLegal) {
    System.out.println("输入的不是Base64编码的字符串。");
}

同样的,判断字符串是否为base64格式的图片时,可以使用以下方法:

String inputStr="Test Base64 Image";
 if (inputStr.lastIndexOf(",") != -1) {
	  inputStr= inputStr.substring(inputStr.lastIndexOf(",") + 1);
}
try {
	BufferedImage bufImg = ImageIO.read(new ByteArrayInputStream(new BASE64Decoder().decodeBuffer(base64Str)));
	if (null == bufImg) {
		System.out.println("输入的不是Base64编码的图片。");
	}
} catch (IOException e) {
	e.printStackTrace();
}

=================================================================
参考博文1:https://blog.csdn.net/u011159417/article/details/80967902
参考博文2:https://blog.csdn.net/CTLLIN/article/details/50877050

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值