|
1 | 1 | module.exports = function strcspn (str, mask, start, length) {
|
2 | 2 | // discuss at: http://locutus.io/php/strcspn/
|
3 | 3 | // original by: Brett Zamir (http://brett-zamir.me)
|
| 4 | + // revised by: Theriault |
4 | 5 | // example 1: strcspn('abcdefg123', '1234567890')
|
5 | 6 | // returns 1: 7
|
6 | 7 | // example 2: strcspn('123abc', '1234567890')
|
7 |
| - // returns 2: 3 |
| 8 | + // returns 2: 0 |
| 9 | + // example 3: strcspn('abcdefg123', '1234567890', 1) |
| 10 | + // returns 3: 6 |
| 11 | + // example 4: strcspn('abcdefg123', '1234567890', -6, -5) |
| 12 | + // returns 4: 1 |
8 | 13 |
|
9 | 14 | start = start || 0
|
10 |
| - var count = (length && ((start + length) < str.length)) ? start + length : str.length |
11 |
| - strct: for (var i = start, lgth = 0; i < count; i++) { // eslint-disable-line no-labels |
12 |
| - for (var j = 0; j < mask.length; j++) { |
13 |
| - if (str.charAt(i).indexOf(mask[j]) !== -1) { |
14 |
| - continue strct // eslint-disable-line no-labels |
15 |
| - } |
| 15 | + length = typeof length === 'undefined' ? str.length : (length || 0) |
| 16 | + if (start < 0) start = str.length + start |
| 17 | + if (length < 0) length = str.length - start + length |
| 18 | + if (start < 0 || start >= str.length || length <= 0 || e >= str.length) return 0 |
| 19 | + var e = Math.min(str.length, start + length) |
| 20 | + for (var i = start, lgth = 0; i < e; i++) { |
| 21 | + if (mask.indexOf(str.charAt(i)) !== -1) { |
| 22 | + break |
16 | 23 | }
|
17 | 24 | ++lgth
|
18 | 25 | }
|
19 |
| - |
20 | 26 | return lgth
|
21 | 27 | }
|
0 commit comments