string.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import { stringify } from './mixed';
  2. import { rangeEach } from './number';
  3. /**
  4. * Convert string to upper case first letter.
  5. *
  6. * @param {String} string String to convert.
  7. * @returns {String}
  8. */
  9. export function toUpperCaseFirst(string) {
  10. return string[0].toUpperCase() + string.substr(1);
  11. }
  12. /**
  13. * Compare strings case insensitively.
  14. *
  15. * @param {...String} strings Strings to compare.
  16. * @returns {Boolean}
  17. */
  18. export function equalsIgnoreCase() {
  19. var unique = [];
  20. for (var _len = arguments.length, strings = Array(_len), _key = 0; _key < _len; _key++) {
  21. strings[_key] = arguments[_key];
  22. }
  23. var length = strings.length;
  24. while (length--) {
  25. var string = stringify(strings[length]).toLowerCase();
  26. if (unique.indexOf(string) === -1) {
  27. unique.push(string);
  28. }
  29. }
  30. return unique.length === 1;
  31. }
  32. /**
  33. * Generates a random hex string. Used as namespace for Handsontable instance events.
  34. *
  35. * @return {String} Returns 16-long character random string (eq. `'92b1bfc74ec4'`).
  36. */
  37. export function randomString() {
  38. function s4() {
  39. return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);
  40. }
  41. return s4() + s4() + s4() + s4();
  42. }
  43. /**
  44. * Checks if value is valid percent.
  45. *
  46. * @param {String} value
  47. * @returns {Boolean}
  48. */
  49. export function isPercentValue(value) {
  50. return (/^([0-9][0-9]?%$)|(^100%$)/.test(value)
  51. );
  52. }
  53. /**
  54. * Substitute strings placed beetwen square brackets into value defined in `variables` object. String names defined in
  55. * square brackets must be the same as property name of `variables` object.
  56. *
  57. * @param {String} template Template string.
  58. * @param {Object} variables Object which contains all available values which can be injected into template.
  59. * @returns {String}
  60. */
  61. export function substitute(template) {
  62. var variables = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  63. return ('' + template).replace(/(?:\\)?\[([^[\]]+)]/g, function (match, name) {
  64. if (match.charAt(0) === '\\') {
  65. return match.substr(1, match.length - 1);
  66. }
  67. return variables[name] === void 0 ? '' : variables[name];
  68. });
  69. }
  70. var STRIP_TAGS_REGEX = /<\/?\w+\/?>|<\w+[\s|/][^>]*>/gi;
  71. /**
  72. * Strip any HTML tag from the string.
  73. *
  74. * @param {String} string String to cut HTML from.
  75. * @return {String}
  76. */
  77. export function stripTags(string) {
  78. string += '';
  79. return string.replace(STRIP_TAGS_REGEX, '');
  80. }