isDataURI.js 989 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. import assertString from './util/assertString';
  2. var validMediaType = /^[a-z]+\/[a-z0-9\-\+]+$/i;
  3. var validAttribute = /^[a-z\-]+=[a-z0-9\-]+$/i;
  4. var validData = /^[a-z0-9!\$&'\(\)\*\+,;=\-\._~:@\/\?%\s]*$/i;
  5. export default function isDataURI(str) {
  6. assertString(str);
  7. var data = str.split(',');
  8. if (data.length < 2) {
  9. return false;
  10. }
  11. var attributes = data.shift().trim().split(';');
  12. var schemeAndMediaType = attributes.shift();
  13. if (schemeAndMediaType.substr(0, 5) !== 'data:') {
  14. return false;
  15. }
  16. var mediaType = schemeAndMediaType.substr(5);
  17. if (mediaType !== '' && !validMediaType.test(mediaType)) {
  18. return false;
  19. }
  20. for (var i = 0; i < attributes.length; i++) {
  21. if (!(i === attributes.length - 1 && attributes[i].toLowerCase() === 'base64') && !validAttribute.test(attributes[i])) {
  22. return false;
  23. }
  24. }
  25. for (var _i = 0; _i < data.length; _i++) {
  26. if (!validData.test(data[_i])) {
  27. return false;
  28. }
  29. }
  30. return true;
  31. }