Déterminer si la chaîne est en base64 en utilisant JavaScript
Je suis en utilisant le window.atob('string')
fonction de décoder une chaîne base64 pour une chaîne de caractères. Maintenant je me demande, est-il un moyen de vérifier que la "chaîne" est en fait valable base64? Je souhaite être informé si la chaîne n'est pas en base64 afin que je puisse effectuer une action différente.
source d'informationauteur Jonatan
Vous devez vous connecter pour publier un commentaire.
Si "valide" signifie "seulement a base64 caractères", puis la case contre
[A-Za-z0-9+/=]
.Si "valide" signifie un "juridique" chaîne base64, alors vous devriez vérifier la
=
à la fin.Si "valide" signifie que c'est quelque chose de raisonnable après décodage puis elle nécessite la connaissance du domaine.
Si vous voulez vérifier si elle peut être décodé ou pas, vous pouvez simplement essayer de les décoder et de voir si elle a échoué:
Cela devrait faire l'affaire.
Je voudrais utiliser une expression régulière pour que. Essayez celui-ci:
Explication:
Bâtiment sur @atornblad réponse, en utilisant les regex pour faire un simple test vrai ou faux de validité base64 est aussi facile comme suit:
Cette méthode tente de décoder puis de coder et de les comparer à l'original. Pourrait également être combinée avec les autres réponses pour les environnements de jeter sur l'analyse des erreurs. Il est aussi possible d'avoir une chaîne qui ressemble valide base64 à partir d'une expression régulière point de vue, mais n'est pas réel, base64.
C'est la façon dont c'est fait dans un de mes préférés de validation libs:
https://github.com/chriso/validator.js/blob/master/src/lib/isBase64.js
Comme il y a principalement deux possibilités posté ici (regex vs try catch) je n'ai comparer la performance de deux:
https://jsperf.com/base64-check/
Regex solution semble être beaucoup plus rapide et gagnant.
Vous ne savez pas si la regex captures tous les cas, mais pour mes tests, cela a fonctionné parfaitement.
Grâce à @Philzen pour les regex!
p.s.
Au cas où quelqu'un est intéressé à trouver le moyen le plus rapide, en toute sécurité décodage en base64 chaîne (c'est comment je suis arrivé ici):
https://jsperf.com/base64-decoding-check