48 votes

Déterminer si la chaîne est en base64 en utilisant JavaScript

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.

65voto

pimvdb Points 66332

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')
}

49voto

Dan Smith Points 457

Cela devrait faire l'affaire.

function isBase64(str) {
    if (str ==='' || str.trim() ===''){ return false; }
    try {
        return btoa(atob(str)) == str;
    } catch (err) {
        return false;
    }
}

39voto

Dave Newton Points 93112

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.

26voto

atornblad Points 5599

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X