diff --git a/core/js/js.js b/core/js/js.js index b6bfa01d0d52b019227c44d7f9ab6dd3dfb45c61..60791dcc8d8b2dbfac87c9dcbecbc6ced6a98e7d 100644 --- a/core/js/js.js +++ b/core/js/js.js @@ -1373,7 +1373,8 @@ OC.Util = { while (x < t.length) { c = t.charAt(x); - var m = (c === '.' || (c >= '0' && c <= '9')); + // only include the dot in strings + var m = ((!n && c === '.') || (c >= '0' && c <= '9')); if (m !== n) { // next chunk y++; @@ -1393,6 +1394,7 @@ OC.Util = { * or 0 if the strings are identical */ naturalSortCompare: function(a, b) { + var x; var aa = OC.Util._chunkify(a); var bb = OC.Util._chunkify(b); diff --git a/core/js/tests/specs/coreSpec.js b/core/js/tests/specs/coreSpec.js index 265b9deac39353d11a376569c2b20a653f7cd6a3..6d40a066de8dfb4b51ff6ecebab907c3272d0574 100644 --- a/core/js/tests/specs/coreSpec.js +++ b/core/js/tests/specs/coreSpec.js @@ -531,10 +531,14 @@ describe('Core base tests', function() { 'za', 'ghi 1.txt', 'ghi 12.txt', - 'zz' + 'zz', + '15.txt', + '15b.txt' ]; a.sort(OC.Util.naturalSortCompare); expect(a).toEqual([ + '15.txt', + '15b.txt', '123.txt', '124.txt', 'abc', diff --git a/lib/private/naturalsort.php b/lib/private/naturalsort.php index b6fa0ed89684d1cc7ecf5e89888d881847e52eab..e10ce8e45e72fa97bbaa7853b157e83a58df6ef4 100644 --- a/lib/private/naturalsort.php +++ b/lib/private/naturalsort.php @@ -39,7 +39,8 @@ class NaturalSort { while ($x < $length) { $c = $t[$x]; - $m = ($c === '.' || ($c >= '0' && $c <= '9')); + // only include the dot in strings + $m = ((!$n && $c === '.') || ($c >= '0' && $c <= '9')); if ($m !== $n) { // next chunk $y++; diff --git a/tests/lib/naturalsort.php b/tests/lib/naturalsort.php index a880acaeec425268f67042f264559aa9bfb4ddfa..09a0e6a5f9d7454555917a9b8b57358399e197ac 100644 --- a/tests/lib/naturalsort.php +++ b/tests/lib/naturalsort.php @@ -74,9 +74,13 @@ class Test_NaturalSort extends PHPUnit_Framework_TestCase { 'ghi 1.txt', 'ghi 12.txt', 'zz', + '15.txt', + '15b.txt', ), // sorted array( + '15.txt', + '15b.txt', '123.txt', '124.txt', 'abc',