UNPKG

1.07 kBJavaScriptView Raw
1import globalize from './internal/globalize';
2
3/**
4 * Compare two strings in alphanumeric way
5 * @method alphanum
6 * @param {String} a first string to compare
7 * @param {String} b second string to compare
8 * @return {Number(-1|0|1)} -1 if a < b, 0 if a = b, 1 if a > b
9 */
10function alphanum (a, b) {
11 a = (a + '').toLowerCase();
12 b = (b + '').toLowerCase();
13
14 var chunks = /(\d+|\D+)/g;
15 var am = a.match(chunks);
16 var bm = b.match(chunks);
17 var len = Math.max(am.length, bm.length);
18
19 for (var i = 0; i < len; i++) {
20 if (i === am.length) {
21 return -1;
22 }
23
24 if (i === bm.length) {
25 return 1;
26 }
27
28 var ad = parseInt(am[i], 10) + '';
29 var bd = parseInt(bm[i], 10) + '';
30
31 if (ad === am[i] && bd === bm[i] && ad !== bd) {
32 return (ad - bd) / Math.abs(ad - bd);
33 }
34
35 if ((ad !== am[i] || bd !== bm[i]) && am[i] !== bm[i]) {
36 return am[i] < bm[i] ? -1 : 1;
37 }
38 }
39
40 return 0;
41}
42
43globalize('alphanum', alphanum);
44
45export default alphanum;