Skip to content

Commit 82e0953

Browse files
committed
JSLint, optimize str_getcsv and allow for omitted enclosure
1 parent e95e1bc commit 82e0953

File tree

2 files changed

+12
-9
lines changed

2 files changed

+12
-9
lines changed

functions/pcre/preg_quote.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@ function preg_quote(str, delimiter) {
1212
// example 3: preg_quote("\\.+*?[^]$(){}=!<>|:");
1313
// returns 3: '\\\\\\.\\+\\*\\?\\[\\^\\]\\$\\(\\)\\{\\}\\=\\!\\<\\>\\|\\:'
1414

15-
return (str + '')
15+
return String(str)
1616
.replace(new RegExp('[.\\\\+*?\\[\\^\\]$(){}=!<>|:\\' + (delimiter || '') + '-]', 'g'), '\\$&');
1717
}

functions/strings/str_getcsv.js

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,35 +5,38 @@ function str_getcsv(input, delimiter, enclosure, escape) {
55
// returns 1: ['abc', 'def', 'ghi']
66
// example 2: str_getcsv('"row2""cell1","row2cell2","row2cell3"', null, null, '"');
77
// returns 2: ['row2"cell1', 'row2cell2', 'row2cell3']
8+
// example 3: str_getcsv('"row2""cell1",row2cell2,row2cell3', null, null, '"');
89

9-
var output = [];
10+
var i, inpLen, output = [];
1011
var backwards = function(str) { // We need to go backwards to simulate negative look-behind (don't split on
1112
//an escaped enclosure even if followed by the delimiter and another enclosure mark)
1213
return str.split('')
1314
.reverse()
1415
.join('');
1516
};
1617
var pq = function(str) { // preg_quote()
17-
return (str + '')
18-
.replace(/([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:])/g, '\\$1');
18+
return String(str)
19+
.replace(/([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!<\>\|\:])/g, '\\$1');
1920
};
2021

2122
delimiter = delimiter || ',';
2223
enclosure = enclosure || '"';
2324
escape = escape || '\\';
25+
var pqEnc = pq(enclosure) + '?';
26+
var pqEsc = pq(escape);
2427

25-
input = input.replace(new RegExp('^\\s*' + pq(enclosure)), '')
26-
.replace(new RegExp(pq(enclosure) + '\\s*$'), '');
28+
input = input.replace(new RegExp('^\\s*' + pqEnc), '')
29+
.replace(new RegExp(pqEnc + '\\s*$'), '');
2730

2831
// PHP behavior may differ by including whitespace even outside of the enclosure
2932
input = backwards(input)
30-
.split(new RegExp(pq(enclosure) + '\\s*' + pq(delimiter) + '\\s*' + pq(enclosure) + '(?!' + pq(escape) + ')',
33+
.split(new RegExp(pqEnc + '\\s*' + pq(delimiter) + '\\s*' + pqEnc + '(?!' + pqEsc + ')',
3134
'g'))
3235
.reverse();
3336

34-
for (var i = 0; i < input.length; i++) {
37+
for (i = 0, inpLen = input.length; i < inpLen; i++) {
3538
output.push(backwards(input[i])
36-
.replace(new RegExp(pq(escape) + pq(enclosure), 'g'), enclosure));
39+
.replace(new RegExp(pqEsc + pqEnc, 'g'), enclosure));
3740
}
3841

3942
return output;

0 commit comments

Comments
 (0)