我希望解码一个Base64编码的字符串,并将其存储在我的数据库中。如果输入不是Base64编码,我需要抛出错误。
如何检查一个字符串是否为Base64编码?
我希望解码一个Base64编码的字符串,并将其存储在我的数据库中。如果输入不是Base64编码,我需要抛出错误。
如何检查一个字符串是否为Base64编码?
这在Python中可行:
def is_base64(string):
if len(string) % 4 == 0 and re.test('^[A-Za-z0-9+\/=]+\Z', string):
return(True)
else:
return(False)
对于Java版本,我实际上使用以下正则表达式:
"([A-Za-z0-9+]{4})*([A-Za-z0-9+]{3}=|[A-Za-z0-9+]{2}(==){0,2})?"
在某些情况下,它也可以选择使用==
。
最好!
当你知道原始内容的长度(例如校验和)时,此代码片段可能非常有用。它检查编码形式是否具有正确的长度。
public static boolean isValidBase64( final int initialLength, final String string ) {
final int padding ;
final String regexEnd ;
switch( ( initialLength ) % 3 ) {
case 1 :
padding = 2 ;
regexEnd = "==" ;
break ;
case 2 :
padding = 1 ;
regexEnd = "=" ;
break ;
default :
padding = 0 ;
regexEnd = "" ;
}
final int encodedLength = ( ( ( initialLength / 3 ) + ( padding > 0 ? 1 : 0 ) ) * 4 ) ;
final String regex = "[a-zA-Z0-9/\\+]{" + ( encodedLength - padding ) + "}" + regexEnd ;
return Pattern.compile( regex ).matcher( string ).matches() ;
}
def encoded?(str)
Base64.decode64(str.downcase).scan(/[^[:ascii:]]/).count.zero?
end
def decoded?(str)
Base64.decode64(str.downcase).scan(/[^[:ascii:]]/).count > 0
end
我尝试使用这个,是的,这个可以使用。
^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$
但我添加了一个条件来检查至少字符的结尾是否为=
string.lastIndexOf("=") >= 0
=
:您使用的是哪个 Base64
规范?什么是“字符结尾”,非负数的 lastIndexOf()
如何进行检查? - greybeardbase64
字符大部分情况下总是以=
结尾。 - Ashadi Sedana Pratama
test1234
是一个有效的Base64编码字符串,解码后会得到一些字节。没有应用程序独立的方法可以得出test1234
不是Base64编码字符串的结论。 - Kinjal Dixit