J'utilise la fonction window.atob('string')
pour décoder une chaîne de base64 en une chaîne. Maintenant je me demande, y a-t-il un moyen de vérifier que 'string' est réellement valide base64 ? Je voudrais être notifié si la chaîne n'est pas base64 afin de pouvoir effectuer une action différente.
Réponses
Trop de publicités?Si vous voulez vérifier s'il peut être décodé ou non, vous pouvez simplement essayer de le décoder et voir s'il a échoué :
try {
window.atob(str);
} catch(e) {
// something failed
// if you want to be specific and only catch the error which means
// the base 64 was invalid, then check for 'e.code === 5'.
// (because 'DOMException.INVALID_CHARACTER_ERR === 5')
}
Si "valide" signifie "n'a que des caractères de base64 dedans", vérifiez par rapport /[A-Za-z0-9+/=]/
.
Si "valide" signifie une chaîne "légale" codée en base64, alors vous devriez vérifier le =
à la fin.
Si "valide" signifie que c'est quelque chose de raisonnable après le décodage, alors cela nécessite une connaissance du domaine.
J'utiliserais une expression régulière pour ça. Essayez celui-ci :
/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/
Explication :
^ # Start of input
([0-9a-zA-Z+/]{4})* # Groups of 4 valid characters decode
# to 24 bits of data for each group
( # Either ending with:
([0-9a-zA-Z+/]{2}==) # two valid characters followed by ==
| # , or
([0-9a-zA-Z+/]{3}=) # three valid characters followed by =
)? # , or nothing
$ # End of input