diff --git a/es5-shim.js b/es5-shim.js index d2c0ad08..cfd82830 100644 --- a/es5-shim.js +++ b/es5-shim.js @@ -1578,14 +1578,14 @@ defineProperties(StringPrototype, { // ES5 15.5.4.20 // whitespace from: http://es5.github.io/#x15.5.4.20 -var ws = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003' + - '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028' + - '\u2029\uFEFF'; -var zeroWidth = '\u200b'; -var wsRegexChars = '[' + ws + ']'; -var trimBeginRegexp = new RegExp('^' + wsRegexChars + wsRegexChars + '*'); -var trimEndRegexp = new RegExp(wsRegexChars + wsRegexChars + '*$'); -var hasTrimWhitespaceBug = StringPrototype.trim && (ws.trim() || !zeroWidth.trim()); +var ws = '\t\n\v\f\r \xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005' + + '\u2006\u2007\u2008\u2009\u200A\u200B\u2028\u2029\u202F\u205F\u3000\uFEFF'; +var nxtLine = '\x85'; +var wsRegexChars = '[' + ws + '][' + ws + ']*'; +var trimBeginRegexp = new RegExp('^' + wsRegexChars); +var trimEndRegexp = new RegExp(wsRegexChars + '$'); +var hasTrimWhitespaceBug = typeof StringPrototype.trim === 'function' && + (ws.trim() !== '' || nxtLine.trim() === ''); defineProperties(StringPrototype, { // http://blog.stevenlevithan.com/archives/faster-trim-javascript // http://perfectionkills.com/whitespace-deviations/ diff --git a/tests/spec/s-string.js b/tests/spec/s-string.js index de62924b..6b66947e 100644 --- a/tests/spec/s-string.js +++ b/tests/spec/s-string.js @@ -4,16 +4,18 @@ describe('String', function () { 'use strict'; describe('trim', function () { - var test = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFFHello, World!\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF'; + var wsp = '\t\n\v\f\r \xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005' + + '\u2006\u2007\u2008\u2009\u200A\u200B\u2028\u2029\u202F\u205F\u3000\uFEFF'; + var test = [wsp, 'Hello, World!', wsp].join(''); it('trims all ES5 whitespace', function () { expect(test.trim()).toEqual('Hello, World!'); expect(test.trim().length).toBe(13); }); - it('does not trim the zero-width space', function () { - expect('\u200b'.trim()).toBe('\u200b'); - expect('\u200b'.trim().length).toBe(1); + it('does not trim the next-line character', function () { + expect('\x85'.trim()).toBe('\x85'); + expect('\x85'.trim().length).toBe(1); }); });