2 * Provides helper functions for String handling.
4 * @author Tim Duesterhus, Joshua Ruesweg
5 * @copyright 2001-2018 WoltLab GmbH
6 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
7 * @module WoltLabSuite/Core/StringUtil
9 define(['Language', './NumberUtil'], function(Language
, NumberUtil
) {
13 * @exports WoltLabSuite/Core/StringUtil
17 * Adds thousands separators to a given number.
19 * @see http://stackoverflow.com/a/6502556/782822
23 addThousandsSeparator: function(number
) {
24 // Fetch Language, as it cannot be provided because of a circular dependency
25 if (Language
=== undefined) Language
= require('Language');
27 return String(number
).replace(/(^-?\d{1,3}|\d{3})(?=(?:\d{3})+(?:$|\.))/g, '$1' + Language
.get('wcf.global.thousandsSeparator'));
31 * Escapes special HTML-characters within a string
36 escapeHTML: function (string
) {
37 return String(string
).replace(/&/g, '&').replace(/"/g, '"').replace(/</g, '<').replace(/>/g, '>');
41 * Escapes a String to work with RegExp.
43 * @see https://github.com/sstephenson/prototype/blob/master/src/prototype/lang/regexp.js#L25
47 escapeRegExp: function(string) {
48 return String(string).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
52 * Rounds number to given count of floating point digits, localizes decimal-point and inserts thousands separators.
55 * @param {int} decimalPlaces The number of decimal places to leave after rounding.
58 formatNumeric: function(number, decimalPlaces) {
59 // Fetch Language, as it cannot be provided because of a circular dependency
60 if (Language === undefined) Language = require('Language');
62 number = String(NumberUtil.round(number, decimalPlaces || -2));
63 var numberParts = number.split('.');
65 number = this.addThousandsSeparator(numberParts[0]);
66 if (numberParts.length > 1) number += Language.get('wcf.global.decimalPoint') + numberParts[1];
68 number = number.replace('-', '\u2212');
74 * Makes a string's first character lowercase.
79 lcfirst: function(string) {
80 return String(string).substring(0, 1).toLowerCase() + string.substring(1);
84 * Makes a string's first character uppercase.
89 ucfirst: function(string) {
90 return String(string).substring(0, 1).toUpperCase() + string.substring(1);
94 * Unescapes special HTML-characters within a string.
99 unescapeHTML: function(string) {
100 return String(string).replace(/&/g, '&').replace(/"/g, '"').replace(/</g, '<').replace(/>/g, '>');
104 * Shortens numbers larger than 1000 by using unit prefixes.
109 shortUnit: function(number) {
112 if (number >= 1000000) {
116 number = Math.floor(number);
119 number = NumberUtil.round(number, -1);
124 else if (number >= 1000) {
128 number = Math.floor(number);
131 number = NumberUtil.round(number, -1);
137 return this.formatNumeric(number) + unitSuffix;