Skip to content

Commit de6923f

Browse files
committed
Fixed several string functions to be weakly typed, so you're allowed to pass the value 6 instead of '6'.
1 parent b72566d commit de6923f

File tree

16 files changed

+99
-73
lines changed

16 files changed

+99
-73
lines changed

functions/strings/bin2hex.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
function bin2hex(s){
22
// http://kevin.vanzonneveld.net
33
// + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
4+
// + bugfixed by: Onno Marsman
45
// * example 1: bin2hex('Kev');
56
// * returns 1: '4b6576'
67

7-
var i, f = s.length, a = [];
8+
var i, f = 0, a = [];
9+
s += '';
10+
f = s.length;
811
for(i = 0; i<f; i++){
912
a[i] = s.charCodeAt(i).toString(16);
1013
}

functions/strings/count_chars.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@ function count_chars( str, mode ) {
22
// http://kevin.vanzonneveld.net
33
// + original by: Ates Goral (http://magnetiq.com)
44
// + tweaked by: Jack
5+
// + bugfixed by: Onno Marsman
56
// * example 1: count_chars("Hello World!", 1);
67
// * returns 1: "Hd e!lWor"
78

89
var histogram = new Object(), tmp_arr = new Array();
9-
var key, i, code, mode, strl = 0;
10+
var key, i, code, mode, strl = 0;
1011
var argc = arguments.length;
1112

1213
if (argc == 1) {
@@ -19,7 +20,9 @@ function count_chars( str, mode ) {
1920
histogram[i] = 0;
2021
}
2122
}
22-
23+
24+
str += '';
25+
2326
strl = str.length;
2427
for (i = 0; i < strl; ++i) {
2528
code = str.charCodeAt(i);

functions/strings/html_entity_decode.js

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,14 @@ function html_entity_decode( string ) {
44
// + input by: ger
55
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
66
// + revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
7+
// + bugfixed by: Onno Marsman
78
// % note: table from http://www.the-art-of-web.com/html/character-codes/
89
// * example 1: html_entity_decode('Kevin &amp; van Zonneveld');
910
// * returns 1: 'Kevin & van Zonneveld'
10-
11+
1112
var histogram = {}, histogram_r = {}, code = 0;
1213
var entity = chr = '';
13-
14+
1415
histogram['34'] = 'quot';
1516
histogram['38'] = 'amp';
1617
histogram['60'] = 'lt';
@@ -111,19 +112,19 @@ function html_entity_decode( string ) {
111112
histogram['253'] = 'yacute';
112113
histogram['254'] = 'thorn';
113114
histogram['255'] = 'yuml';
114-
115-
// Reverse table. Cause for maintainability purposes, the histogram is
115+
116+
// Reverse table. Cause for maintainability purposes, the histogram is
116117
// identical to the one in htmlentities.
117118
for (code in histogram) {
118119
entity = histogram[code];
119-
histogram_r[entity] = code;
120+
histogram_r[entity] = code;
120121
}
121-
122-
return string.replace(/(\&([a-zA-Z]+)\;)/g, function(full, m1, m2){
122+
123+
return (string+'').replace(/(\&([a-zA-Z]+)\;)/g, function(full, m1, m2){
123124
if (m2 in histogram_r) {
124125
return String.fromCharCode(histogram_r[m2]);
125126
} else {
126127
return m2;
127128
}
128-
});
129+
});
129130
}

functions/strings/htmlentities.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,14 @@ function htmlentities( string ){
44
// + revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
55
// + improved by: nobbler
66
// + tweaked by: Jack
7+
// + bugfixed by: Onno Marsman
78
// % note: table from http://www.the-art-of-web.com/html/character-codes/
89
// * example 1: htmlentities('Kevin & van Zonneveld');
910
// * returns 1: 'Kevin &amp; van Zonneveld'
10-
11+
1112
var histogram = {}, code = 0, tmp_arr = [], i = 0;
1213
var stringl = 0;
13-
14+
1415
histogram['34'] = 'quot';
1516
histogram['38'] = 'amp';
1617
histogram['60'] = 'lt';
@@ -111,7 +112,8 @@ function htmlentities( string ){
111112
histogram['253'] = 'yacute';
112113
histogram['254'] = 'thorn';
113114
histogram['255'] = 'yuml';
114-
115+
116+
string += '';
115117
stringl = string.length
116118
for (i = 0; i < stringl; ++i) {
117119
code = string.charCodeAt(i);
@@ -121,6 +123,6 @@ function htmlentities( string ){
121123
tmp_arr[i] = string.charAt(i);
122124
}
123125
}
124-
126+
125127
return tmp_arr.join('');
126128
}

functions/strings/levenshtein.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
function levenshtein( str1, str2 ) {
22
// http://kevin.vanzonneveld.net
33
// + original by: Carlos R. L. Rodrigues (http://www.jsfromhell.com)
4+
// + bugfixed by: Onno Marsman
45
// * example 1: levenshtein('Kevin van Zonneveld', 'Kevin van Sommeveld');
56
// * returns 1: 3
67

7-
var s, l = (s = str1.split("")).length, t = (str2 = str2.split("")).length, i, j, m, n;
8+
var s, l = (s = (str1+'').split("")).length, t = (str2 = (str2+'').split("")).length, i, j, m, n;
89
if(!(l || t)) return Math.max(l, t);
910
for(var a = [], i = l + 1; i; a[--i] = [i]);
1011
for(i = t + 1; a[0][--i] = i;);

functions/strings/ltrim.js

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
function ltrim ( str, charlist ) {
2-
// http://kevin.vanzonneveld.net
3-
// + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
4-
// + input by: Erkekjetter
5-
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
6-
// * example 1: ltrim(' Kevin van Zonneveld ');
7-
// * returns 1: 'Kevin van Zonneveld '
8-
9-
charlist = !charlist ? ' \s\xA0' : charlist.replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '\$1');
10-
var re = new RegExp('^[' + charlist + ']+', 'g');
11-
return str.replace(re, '');
1+
function ltrim ( str, charlist ) {
2+
// http://kevin.vanzonneveld.net
3+
// + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
4+
// + input by: Erkekjetter
5+
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
6+
// + bugfixed by: Onno Marsman
7+
// * example 1: ltrim(' Kevin van Zonneveld ');
8+
// * returns 1: 'Kevin van Zonneveld '
9+
10+
charlist = !charlist ? ' \s\xA0' : (charlist+'').replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '\$1');
11+
var re = new RegExp('^[' + charlist + ']+', 'g');
12+
return (str+'').replace(re, '');
1213
}

functions/strings/ord.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
function ord( string ) {
22
// http://kevin.vanzonneveld.net
33
// + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
4+
// + bugfixed by: Onno Marsman
45
// * example 1: ord('K');
56
// * returns 1: 75
67

7-
return string.charCodeAt(0);
8+
return (string+'').charCodeAt(0);
89
}

functions/strings/parse_str.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ function parse_str(str, array){
33
// + original by: Cagri Ekin
44
// + improved by: Michael White (http://getsprink.com)
55
// + tweaked by: Jack
6+
// + bugfixed by: Onno Marsman
67
// * example 1: parse_str('first=foo&second=bar');
78
// * returns 1: { first: 'foo', second: 'bar' }
89
// * example 2: parse_str('str_a=Jack+and+Jill+didn%27t+see+the+well.');
@@ -11,10 +12,10 @@ function parse_str(str, array){
1112
var glue1 = '=';
1213
var glue2 = '&';
1314

14-
var array2 = str.split(glue2);
15+
var array2 = (str+'').split(glue2);
1516
var array3 = [];
1617
var array2l = 0, tmp = '', x = 0;
17-
18+
1819
array2l = array2.length;
1920
for (x = 0; x<array2l; x++) {
2021
tmp = array2[x].split(glue1);

functions/strings/rtrim.js

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
function rtrim ( str, charlist ) {
2-
// http://kevin.vanzonneveld.net
3-
// + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
4-
// + input by: Erkekjetter
5-
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
6-
// * example 1: rtrim(' Kevin van Zonneveld ');
7-
// * returns 1: ' Kevin van Zonneveld'
8-
9-
charlist = !charlist ? ' \s\xA0' : charlist.replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '\$1');
10-
var re = new RegExp('[' + charlist + ']+$', 'g');
11-
return str.replace(re, '');
1+
function rtrim ( str, charlist ) {
2+
// http://kevin.vanzonneveld.net
3+
// + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
4+
// + input by: Erkekjetter
5+
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
6+
// + bugfixed by: Onno Marsman
7+
// * example 1: rtrim(' Kevin van Zonneveld ');
8+
// * returns 1: ' Kevin van Zonneveld'
9+
10+
charlist = !charlist ? ' \s\xA0' : (charlist+'').replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '\$1');
11+
var re = new RegExp('[' + charlist + ']+$', 'g');
12+
return (str+'').replace(re, '');
1213
}

functions/strings/soundex.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ function soundex(str) {
33
// + original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
44
// + tweaked by: Jack
55
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
6+
// + bugfixed by: Onno Marsman
67
// * example 1: soundex('Kevin');
78
// * returns 1: 'K150'
89
// * example 2: soundex('Ellery');
@@ -12,9 +13,9 @@ function soundex(str) {
1213

1314
var i, j, l, r, p = isNaN(p) ? 4 : p > 10 ? 10 : p < 4 ? 4 : p;
1415
var m = {BFPV: 1, CGJKQSXZ: 2, DT: 3, L: 4, MN: 5, R: 6};
15-
var r = (s = str.toUpperCase().replace(/[^A-Z]/g, "").split("")).splice(0, 1);
16+
var r = (s = (str+'').toUpperCase().replace(/[^A-Z]/g, "").split("")).splice(0, 1);
1617
var sl = 0;
17-
18+
1819
sl = s.length;
1920
for (i = -1, l = sl; ++i < l;) {
2021
for (j in m) {
@@ -23,6 +24,6 @@ function soundex(str) {
2324
}
2425
}
2526
}
26-
27+
2728
return r.length > p && (r.length = p), r.join("") + (new Array(p - r.length + 1)).join("0");
2829
}

0 commit comments

Comments
 (0)