util.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. function isValidUrl(url) {
  2. return isOnlineUrl(url) || isDataUrl(url);
  3. }
  4. function isOnlineUrl(url) {
  5. return /(ht|f)tp(s?):\/\/([^ \\/]*\.)+[^ \\/]*(:[0-9]+)?\/?/.test(url);
  6. }
  7. function isDataUrl(url) {
  8. return /data:image\/(\w+);base64,(.*)/.test(url);
  9. }
  10. /**
  11. * 深度对比两个对象是否一致
  12. * from: https://github.com/epoberezkin/fast-deep-equal
  13. * @param {Object} a 对象a
  14. * @param {Object} b 对象b
  15. * @return {Boolean} 是否相同
  16. */
  17. /* eslint-disable */
  18. function equal(a, b) {
  19. if (a === b) return true;
  20. if (a && b && typeof a == 'object' && typeof b == 'object') {
  21. var arrA = Array.isArray(a),
  22. arrB = Array.isArray(b),
  23. i,
  24. length,
  25. key;
  26. if (arrA && arrB) {
  27. length = a.length;
  28. if (length != b.length) return false;
  29. for (i = length; i-- !== 0; ) if (!equal(a[i], b[i])) return false;
  30. return true;
  31. }
  32. if (arrA != arrB) return false;
  33. var dateA = a instanceof Date,
  34. dateB = b instanceof Date;
  35. if (dateA != dateB) return false;
  36. if (dateA && dateB) return a.getTime() == b.getTime();
  37. var regexpA = a instanceof RegExp,
  38. regexpB = b instanceof RegExp;
  39. if (regexpA != regexpB) return false;
  40. if (regexpA && regexpB) return a.toString() == b.toString();
  41. var keys = Object.keys(a);
  42. length = keys.length;
  43. if (length !== Object.keys(b).length) return false;
  44. for (i = length; i-- !== 0; ) if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;
  45. for (i = length; i-- !== 0; ) {
  46. key = keys[i];
  47. if (!equal(a[key], b[key])) return false;
  48. }
  49. return true;
  50. }
  51. return a !== a && b !== b;
  52. }
  53. module.exports = {
  54. isValidUrl,
  55. isOnlineUrl,
  56. isDataUrl,
  57. equal
  58. };