JavaScript str_pad function

A JavaScript equivalent of PHP’s str_pad

function str_pad (input, pad_length, pad_string, pad_type) {
  // http://kevin.vanzonneveld.net
  // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  // + namespaced by: Michael White (http://getsprink.com)
  // +      input by: Marco van Oort
  // +   bugfixed by: Brett Zamir (http://brett-zamir.me)
  // *     example 1: str_pad('Kevin van Zonneveld', 30, '-=', 'STR_PAD_LEFT');
  // *     returns 1: '-=-=-=-=-=-Kevin van Zonneveld'
  // *     example 2: str_pad('Kevin van Zonneveld', 30, '-', 'STR_PAD_BOTH');
  // *     returns 2: '------Kevin van Zonneveld-----'
  var half = '',
    pad_to_go;

  var str_pad_repeater = function (s, len) {
    var collect = '',
      i;

    while (collect.length < len) {
      collect += s;
    }
    collect = collect.substr(0, len);

    return collect;
  };

  input += '';
  pad_string = pad_string !== undefined ? pad_string : ' ';

  if (pad_type !== 'STR_PAD_LEFT' && pad_type !== 'STR_PAD_RIGHT' && pad_type !== 'STR_PAD_BOTH') {
    pad_type = 'STR_PAD_RIGHT';
  }
  if ((pad_to_go = pad_length - input.length) > 0) {
    if (pad_type === 'STR_PAD_LEFT') {
      input = str_pad_repeater(pad_string, pad_to_go) + input;
    } else if (pad_type === 'STR_PAD_RIGHT') {
      input = input + str_pad_repeater(pad_string, pad_to_go);
    } else if (pad_type === 'STR_PAD_BOTH') {
      half = str_pad_repeater(pad_string, Math.ceil(pad_to_go / 2));
      input = half + input + half;
      input = input.substr(0, pad_length);
    }
  }

  return input;
}

Example 1
str_pad('Kevin van Zonneveld', 30, '-=', 'STR_PAD_LEFT');

Should return
'-=-=-=-=-=-Kevin van Zonneveld'

Example 2
str_pad('Kevin van Zonneveld', 30, '-', 'STR_PAD_BOTH');

Should return
'------Kevin van Zonneveld-----'

Добавлено: 27 Июля 2018 21:26:32 Добавил: Андрей Ковальчук

JavaScript str_getcsv function

A JavaScript equivalent of PHP’s str_getcsv

function str_getcsv (input, delimiter, enclosure, escape) {
  // http://kevin.vanzonneveld.net
  // +   original by: Brett Zamir (http://brett-zamir.me)
  // *     example 1: str_getcsv('"abc", "def", "ghi"');
  // *     returns 1: ['abc', 'def', 'ghi']
  var output = [];
  var backwards = function (str) { // We need to go backwards to simulate negative look-behind (don't split on
    //an escaped enclosure even if followed by the delimiter and another enclosure mark)
    return str.split('').reverse().join('');
  };
  var pq = function (str) { // preg_quote()
    return (str + '').replace(/([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:])/g, "\\$1");
  };

  delimiter = delimiter || ',';
  enclosure = enclosure || '"';
  escape = escape || '\\';

  input = input.replace(new RegExp('^\\s*' + pq(enclosure)), '').replace(new RegExp(pq(enclosure) + '\\s*$'), '');

  // PHP behavior may differ by including whitespace even outside of the enclosure
  input = backwards(input).split(new RegExp(pq(enclosure) + '\\s*' + pq(delimiter) + '\\s*' + pq(enclosure) + '(?!' + pq(escape) + ')', 'g')).reverse();

  for (var i = 0; i < input.length; i++) {
    output.push(backwards(input[i]).replace(new RegExp(pq(escape) + pq(enclosure), 'g'), enclosure));
  }

  return output;
}

Example 1
str_getcsv('"abc", "def", "ghi"');

Should return
['abc', 'def', 'ghi']

Добавлено: 27 Июля 2018 21:25:33 Добавил: Андрей Ковальчук

JavaScript split function

A JavaScript equivalent of PHP’s split

function split (delimiter, string) {
  // http://kevin.vanzonneveld.net
  // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  // -    depends on: explode
  // *     example 1: split(' ', 'Kevin van Zonneveld');
  // *     returns 1: {0: 'Kevin', 1: 'van', 2: 'Zonneveld'}
  return this.explode(delimiter, string);
}

Example 1
split(' ', 'Kevin van Zonneveld');

Should return
{0: 'Kevin', 1: 'van', 2: 'Zonneveld'}

Добавлено: 27 Июля 2018 21:24:55 Добавил: Андрей Ковальчук

JavaScript soundex function

A JavaScript equivalent of PHP’s soundex

function soundex (str) {
  // http://kevin.vanzonneveld.net
  // +   original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
  // +    tweaked by: Jack
  // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  // +   bugfixed by: Onno Marsman
  // +      input by: Brett Zamir (http://brett-zamir.me)
  // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  // +   original by: Arnout Kazemier (http://www.3rd-Eden.com)
  // +    revised by: Rafał Kukawski (http://blog.kukawski.pl)
  // *     example 1: soundex('Kevin');
  // *     returns 1: 'K150'
  // *     example 2: soundex('Ellery');
  // *     returns 2: 'E460'
  // *     example 3: soundex('Euler');
  // *     returns 3: 'E460'
  str = (str + '').toUpperCase();
  if (!str) {
    return '';
  }
  var sdx = [0, 0, 0, 0],
    m = {
      B: 1,
      F: 1,
      P: 1,
      V: 1,
      C: 2,
      G: 2,
      J: 2,
      K: 2,
      Q: 2,
      S: 2,
      X: 2,
      Z: 2,
      D: 3,
      T: 3,
      L: 4,
      M: 5,
      N: 5,
      R: 6
    },
    i = 0,
    j, s = 0,
    c, p;

  while ((c = str.charAt(i++)) && s < 4) {
    if (j = m[c]) {
      if (j !== p) {
        sdx[s++] = p = j;
      }
    } else {
      s += i === 1;
      p = 0;
    }
  }

  sdx[0] = str.charAt(0);
  return sdx.join('');
}

Example 1
soundex('Kevin');

Should return
'K150'

Example 2
soundex('Ellery');

Should return
'E460'

Example 3
soundex('Euler');

Should return
'E460'

Добавлено: 27 Июля 2018 21:24:13 Добавил: Андрей Ковальчук

JavaScript sha1_file function

A JavaScript equivalent of PHP’s sha1_file

function sha1_file (str_filename) {
  // http://kevin.vanzonneveld.net
  // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  // -    depends on: file_get_contents
  // -    depends on: sha1
  // *     example 1: sha1_file('http://kevin.vanzonneveld.net/pj_test_supportfile_1.htm');
  // *     returns 1: '40bd001563085fc35165329ea1ff5c5ecbdbbeef'
  var buf = this.file_get_contents(str_filename);
  return this.sha1(buf);
}

Example 1
sha1_file('http://kevin.vanzonneveld.net/pj_test_supportfile_1.htm');

Should return
'40bd001563085fc35165329ea1ff5c5ecbdbbeef'

Добавлено: 27 Июля 2018 21:23:10 Добавил: Андрей Ковальчук

JavaScript rtrim function

A JavaScript equivalent of PHP’s rtrim

function rtrim (str, charlist) {
  // http://kevin.vanzonneveld.net
  // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  // +      input by: Erkekjetter
  // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  // +   bugfixed by: Onno Marsman
  // +   input by: rem
  // +   bugfixed by: Brett Zamir (http://brett-zamir.me)
  // *     example 1: rtrim('    Kevin van Zonneveld    ');
  // *     returns 1: '    Kevin van Zonneveld'
  charlist = !charlist ? ' \\s\u00A0' : (charlist + '').replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '\\$1');
  var re = new RegExp('[' + charlist + ']+$', 'g');
  return (str + '').replace(re, '');
}

Example 1
rtrim('    Kevin van Zonneveld    ');

Should return
'    Kevin van Zonneveld'

Добавлено: 27 Июля 2018 21:21:00 Добавил: Андрей Ковальчук

JavaScript quotemeta function

A JavaScript equivalent of PHP’s quotemeta

function quotemeta (str) {
  // http://kevin.vanzonneveld.net
  // +   original by: Paulo Freitas
  // *     example 1: quotemeta(". + * ? ^ ( $ )");
  // *     returns 1: '\. \+ \* \? \^ \( \$ \)'
  return (str + '').replace(/([\.\\\+\*\?\[\^\]\$\(\)])/g, '\\$1');
}

Example 1
quotemeta(". + * ? ^ ( $ )");

Should return
'\. \+ \* \? \^ \( \$ \)'

Добавлено: 27 Июля 2018 21:20:18 Добавил: Андрей Ковальчук

JavaScript quoted_printable_encode function

A JavaScript equivalent of PHP’s quoted_printable_encode

function quoted_printable_encode (str) {
  // +   original by: Theriault
  // +   improved by: Brett Zamir (http://brett-zamir.me)
  // +   improved by: Theriault
  // *     example 1: quoted_printable_encode('a=b=c');
  // *     returns 1: 'a=3Db=3Dc'
  // *     example 2: quoted_printable_encode('abc   \r\n123   \r\n');
  // *     returns 2: 'abc  =20\r\n123  =20\r\n'
  // *     example 3: quoted_printable_encode('0123456789012345678901234567890123456789012345678901234567890123456789012345');
  // *     returns 3: '012345678901234567890123456789012345678901234567890123456789012345678901234=\r\n5'
  // RFC 2045: 6.7.2: Octets with decimal values of 33 through 60 (bang to less-than) inclusive, and 62 through 126 (greater-than to tilde), inclusive, MAY be represented as the US-ASCII characters
  // PHP does not encode any of the above; as does this function.
  // RFC 2045: 6.7.3: Octets with values of 9 and 32 MAY be represented as US-ASCII TAB (HT) and SPACE characters, respectively, but MUST NOT be so represented at the end of an encoded line
  // PHP does not encode spaces (octet 32) except before a CRLF sequence as stated above. PHP always encodes tabs (octet 9). This function replicates PHP.
  // RFC 2045: 6.7.4: A line break in a text body, represented as a CRLF sequence in the text canonical form, must be represented by a (RFC 822) line break
  // PHP does not encode a CRLF sequence, as does this function.
  // RFC 2045: 6.7.5: The Quoted-Printable encoding REQUIRES that encoded lines be no more than 76 characters long. If longer lines are to be encoded with the Quoted-Printable encoding, "soft" line breaks must be used.
  // PHP breaks lines greater than 76 characters; as does this function.
  var hexChars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'],
    RFC2045Encode1IN = / \r\n|\r\n|[^!-<>-~ ]/gm,
    RFC2045Encode1OUT = function (sMatch) {
      // Encode space before CRLF sequence to prevent spaces from being stripped
      // Keep hard line breaks intact; CRLF sequences
      if (sMatch.length > 1) {
        return sMatch.replace(' ', '=20');
      }
      // Encode matching character
      var chr = sMatch.charCodeAt(0);
      return '=' + hexChars[((chr >>> 4) & 15)] + hexChars[(chr & 15)];
    },
    // Split lines to 75 characters; the reason it's 75 and not 76 is because softline breaks are preceeded by an equal sign; which would be the 76th character.
    // However, if the last line/string was exactly 76 characters, then a softline would not be needed. PHP currently softbreaks anyway; so this function replicates PHP.
    RFC2045Encode2IN = /.{1,72}(?!\r\n)[^=]{0,3}/g,
    RFC2045Encode2OUT = function (sMatch) {
      if (sMatch.substr(sMatch.length - 2) === '\r\n') {
        return sMatch;
      }
      return sMatch + '=\r\n';
    };
  str = str.replace(RFC2045Encode1IN, RFC2045Encode1OUT).replace(RFC2045Encode2IN, RFC2045Encode2OUT);
  // Strip last softline break
  return str.substr(0, str.length - 3);
}

Example 1
quoted_printable_encode('a=b=c');

Should return
'a=3Db=3Dc'

Example 2
quoted_printable_encode('abc   \r\n123   \r\n');

Should return
'abc  =20\r\n123  =20\r\n'

Example 3
quoted_printable_encode('0123456789012345678901234567890123456789012345678901234567890123456789012345');

Should return
'012345678901234567890123456789012345678901234567890123456789012345678901234=\r\n5'

Добавлено: 27 Июля 2018 21:19:37 Добавил: Андрей Ковальчук

JavaScript quoted_printable_decode function

A JavaScript equivalent of PHP’s quoted_printable_decode

function quoted_printable_decode (str) {
  // http://kevin.vanzonneveld.net
  // +   original by: Ole Vrijenhoek
  // +   bugfixed by: Brett Zamir (http://brett-zamir.me)
  // +   reimplemented by: Theriault
  // +   improved by: Brett Zamir (http://brett-zamir.me)
  // +   bugfixed by: Theriault
  // *     example 1: quoted_printable_decode('a=3Db=3Dc');
  // *     returns 1: 'a=b=c'
  // *     example 2: quoted_printable_decode('abc  =20\r\n123  =20\r\n');
  // *     returns 2: 'abc   \r\n123   \r\n'
  // *     example 3: quoted_printable_decode('012345678901234567890123456789012345678901234567890123456789012345678901234=\r\n56789');
  // *     returns 3: '01234567890123456789012345678901234567890123456789012345678901234567890123456789'
  // *    example 4: quoted_printable_decode("Lorem ipsum dolor sit amet=23, consectetur adipisicing elit");
  // *    returns 4: Lorem ipsum dolor sit amet#, consectetur adipisicing elit
  // Removes softline breaks
  var RFC2045Decode1 = /=\r\n/gm,
    // Decodes all equal signs followed by two hex digits
    RFC2045Decode2IN = /=([0-9A-F]{2})/gim,
    // the RFC states against decoding lower case encodings, but following apparent PHP behavior
    // RFC2045Decode2IN = /=([0-9A-F]{2})/gm,
    RFC2045Decode2OUT = function (sMatch, sHex) {
      return String.fromCharCode(parseInt(sHex, 16));
    };
  return str.replace(RFC2045Decode1, '').replace(RFC2045Decode2IN, RFC2045Decode2OUT);
}

Example 1
quoted_printable_decode('a=3Db=3Dc');

Should return
'a=b=c'

Example 2
quoted_printable_decode('abc  =20\r\n123  =20\r\n');

Should return
'abc   \r\n123   \r\n'

Example 3
quoted_printable_decode('012345678901234567890123456789012345678901234567890123456789012345678901234=\r\n56789');

Should return
'01234567890123456789012345678901234567890123456789012345678901234567890123456789'

Добавлено: 27 Июля 2018 21:18:28 Добавил: Андрей Ковальчук

JavaScript printf function

A JavaScript equivalent of PHP’s printf

function printf () {
  // http://kevin.vanzonneveld.net
  // +   original by: Ash Searle (http://hexmen.com/blog/)
  // +   improved by: Michael White (http://getsprink.com)
  // +   improved by: Brett Zamir (http://brett-zamir.me)
  // -    depends on: sprintf
  // *     example 1: printf("%01.2f", 123.1);
  // *     returns 1: 6
  var body, elmt, d = this.window.document;
  var ret = '';

  var HTMLNS = 'http://www.w3.org/1999/xhtml';
  body = d.getElementsByTagNameNS ? (d.getElementsByTagNameNS(HTMLNS, 'body')[0] ? d.getElementsByTagNameNS(HTMLNS, 'body')[0] : d.documentElement.lastChild) : d.getElementsByTagName('body')[0];

  if (!body) {
    return false;
  }

  ret = this.sprintf.apply(this, arguments);

  elmt = d.createTextNode(ret);
  body.appendChild(elmt);

  return ret.length;
}

Example 1
printf("%01.2f", 123.1);

Should return
6

Добавлено: 27 Июля 2018 21:17:19 Добавил: Андрей Ковальчук

JavaScript ord function

A JavaScript equivalent of PHP’s ord

function ord (string) {
  // http://kevin.vanzonneveld.net
  // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  // +   bugfixed by: Onno Marsman
  // +   improved by: Brett Zamir (http://brett-zamir.me)
  // +   input by: incidence
  // *     example 1: ord('K');
  // *     returns 1: 75
  // *     example 2: ord('\uD800\uDC00'); // surrogate pair to create a single Unicode character
  // *     returns 2: 65536
  var str = string + '',
    code = str.charCodeAt(0);
  if (0xD800 <= code && code <= 0xDBFF) { // High surrogate (could change last hex to 0xDB7F to treat high private surrogates as single characters)
    var hi = code;
    if (str.length === 1) {
      return code; // This is just a high surrogate with no following low surrogate, so we return its value;
      // we could also throw an error as it is not a complete character, but someone may want to know
    }
    var low = str.charCodeAt(1);
    return ((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000;
  }
  if (0xDC00 <= code && code <= 0xDFFF) { // Low surrogate
    return code; // This is just a low surrogate with no preceding high surrogate, so we return its value;
    // we could also throw an error as it is not a complete character, but someone may want to know
  }
  return code;
}

Example 1
ord('K');

Should return
75

Example 2
ord('\uD800\uDC00'); // surrogate pair to create a single Unicode character

Should return
65536

Добавлено: 27 Июля 2018 21:16:40 Добавил: Андрей Ковальчук

JavaScript nl2br function

A JavaScript equivalent of PHP’s nl2br

function nl2br (str, is_xhtml) {
  // http://kevin.vanzonneveld.net
  // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  // +   improved by: Philip Peterson
  // +   improved by: Onno Marsman
  // +   improved by: Atli Þór
  // +   bugfixed by: Onno Marsman
  // +      input by: Brett Zamir (http://brett-zamir.me)
  // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  // +   improved by: Brett Zamir (http://brett-zamir.me)
  // +   improved by: Maximusya
  // *     example 1: nl2br('Kevin\nvan\nZonneveld');
  // *     returns 1: 'Kevin<br />\nvan<br />\nZonneveld'
  // *     example 2: nl2br("\nOne\nTwo\n\nThree\n", false);
  // *     returns 2: '<br>\nOne<br>\nTwo<br>\n<br>\nThree<br>\n'
  // *     example 3: nl2br("\nOne\nTwo\n\nThree\n", true);
  // *     returns 3: '<br />\nOne<br />\nTwo<br />\n<br />\nThree<br />\n'
  var breakTag = (is_xhtml || typeof is_xhtml === 'undefined') ? '<br ' + '/>' : '<br>'; // Adjust comment to avoid issue on phpjs.org display

  return (str + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1' + breakTag + '$2');
}

Example 1
nl2br('Kevin\nvan\nZonneveld');

Should return
'Kevin<br />\nvan<br />\nZonneveld'

Example 2
nl2br("\nOne\nTwo\n\nThree\n", false);

Should return
'<br>\nOne<br>\nTwo<br>\n<br>\nThree<br>\n'

Example 3
nl2br("\nOne\nTwo\n\nThree\n", true);

Should return
'<br />\nOne<br />\nTwo<br />\n<br />\nThree<br />\n'

Добавлено: 27 Июля 2018 21:15:42 Добавил: Андрей Ковальчук

JavaScript md5_file function

A JavaScript equivalent of PHP’s md5_file

function md5_file (str_filename) {
  // http://kevin.vanzonneveld.net
  // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  // +      input by: Brett Zamir (http://brett-zamir.me)
  // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  // -    depends on: file_get_contents
  // -    depends on: md5
  // *     example 1: md5_file('http://kevin.vanzonneveld.net/pj_test_supportfile_1.htm');
  // *     returns 1: '202cb962ac59075b964b07152d234b70'
  var buf = '';

  buf = this.file_get_contents(str_filename);

  if (!buf) {
    return false;
  }

  return this.md5(buf);
}

Example 1
md5_file('http://kevin.vanzonneveld.net/pj_test_supportfile_1.htm');

Should return
'202cb962ac59075b964b07152d234b70'

Добавлено: 27 Июля 2018 21:14:40 Добавил: Андрей Ковальчук

JavaScript ltrim function

A JavaScript equivalent of PHP’s ltrim

function ltrim (str, charlist) {
  // http://kevin.vanzonneveld.net
  // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  // +      input by: Erkekjetter
  // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  // +   bugfixed by: Onno Marsman
  // *     example 1: ltrim('    Kevin van Zonneveld    ');
  // *     returns 1: 'Kevin van Zonneveld    '
  charlist = !charlist ? ' \\s\u00A0' : (charlist + '').replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '$1');
  var re = new RegExp('^[' + charlist + ']+', 'g');
  return (str + '').replace(re, '');
}

Example 1
ltrim('    Kevin van Zonneveld    ');

Should return
'Kevin van Zonneveld    '

Добавлено: 27 Июля 2018 21:14:00 Добавил: Андрей Ковальчук

JavaScript localeconv function

A JavaScript equivalent of PHP’s localeconv

function localeconv () {
  // http://kevin.vanzonneveld.net
  // +   original by: Brett Zamir (http://brett-zamir.me)
  // -    depends on: setlocale
  // *     example 1: localeconv();
  // *     returns 1: {decimal_point: '.', thousands_sep: ',', positive_sign: '', negative_sign: '-', int_frac_digits: 2, frac_digits: 2, p_cs_precedes: 1, p_sep_by_space: 0, n_cs_precedes: 1, n_sep_by_space: 0, p_sign_posn: 3, n_sign_posn: 0, grouping: 3, int_curr_symbol: 'USD', currency_symbol: '$', mon_decimal_point: '.', mon_thousands_sep: ',', mon_grouping: 3}
  var arr = {},
    prop = '';

  // BEGIN REDUNDANT
  this.setlocale('LC_ALL', 0); // ensure setup of localization variables takes place, if not already
  // END REDUNDANT
  // Make copies
  for (prop in this.php_js.locales[this.php_js.localeCategories.LC_NUMERIC].LC_NUMERIC) {
    arr[prop] = this.php_js.locales[this.php_js.localeCategories.LC_NUMERIC].LC_NUMERIC[prop];
  }
  for (prop in this.php_js.locales[this.php_js.localeCategories.LC_MONETARY].LC_MONETARY) {
    arr[prop] = this.php_js.locales[this.php_js.localeCategories.LC_MONETARY].LC_MONETARY[prop];
  }

  return arr;
}

Example 1
localeconv();

Should return
{decimal_point: '.', thousands_sep: ',', positive_sign: '', negative_sign: '-', int_frac_digits: 2, frac_digits: 2, p_cs_precedes: 1, p_sep_by_space: 0, n_cs_precedes: 1, n_sep_by_space: 0, p_sign_posn: 3, n_sign_posn: 0, grouping: 3, int_curr_symbol: 'USD', currency_symbol: '$', mon_decimal_point: '.', mon_thousands_sep: ',', mon_grouping: 3}

Добавлено: 27 Июля 2018 21:13:15 Добавил: Андрей Ковальчук