ECMAScript 5 の String.prototype.trim を実装する

Zs ではまりましたが、最終的には簡単にできました。
0
think49 @think49

ECMAScript 5 規定 の String.prototype.trim は文字列の先頭、末尾から WhiteSpace (7.2 White Space), LineTerminator(7.3 Line Terminators) を取り除く。 #JavaScript

2010-08-22 22:50:21
think49 @think49

ECMAScript 3, 5 規定 の正規表現 \s は WhiteSpace, LineTerminator (15.10.2.12 CharacterClassEscape) http://bit.ly/cC2OhU #JavaScript

2010-08-22 22:53:24
think49 @think49

従って、String.prototype.trim = function () { return this.replace(/^\s+|\s+$/, ''); }; となる。 #JavaScript

2010-08-22 22:55:09
think49 @think49

ECMAScript 5 規定の WhiteSpace(7.2 White Space) は [\u0009\u000B\u000C\u0020\u00A0\uFFFF] とUnicode文字の space separator(Zs) で構成される。#JavaScript

2010-08-22 22:56:15
think49 @think49

Unicode 5.2.0 規定の Zs は [\u1680\u180E\u2000-\u200A\u202F\u205F\u3000] で構成される。http://bit.ly/as0YEX http://bit.ly/bSp17E #JavaScript

2010-08-22 22:56:45
think49 @think49

ECMAScript 5 規定の LineTerminator (7.3 Line Terminators) は [\u000A\u000D\] で構成される。#JavaScript

2010-08-22 22:56:52
think49 @think49

つまり、正規表現で文字クラスを指定することも可能で実際そうやって実装していた。http://vird2002.s8.xrea.com/javascript/ECMAScript5.js #JavaScript

2010-08-22 22:56:59
think49 @think49

実装当時は \s の仕様を知らなかったためだが、それを知った今となっては \s で十分だと思う。#JavaScript

2010-08-22 22:57:04
think49 @think49

\s の仕様の気づきは gtltさん のコメント ( http://d.hatena.ne.jp/babu_babu_baboo/20100821#c1282439729 ) から得ました。多謝! #JavaScript

2010-08-22 22:57:35
shogo ohta @os0x

@think49 trimの仕様は\sの仕様に対応しますが、IE実装の\sは仕様上の\sには対応してないので一応注意が必要だったり

2010-08-22 23:54:43
Atsushi Takayama @edvakf

IE は正規表現の \s と trim のスペース文字のセットが違うという話を読んだことがある。taku_eof さんだったかな。

2010-08-22 23:57:32
think49 @think49

@os0x @edvakf それは知りませんでした。結局、IE対応がメインとなるので、\s で実装しない方が良さそうですね。そのIEに関する仕様を掲載している参考URLをご存じないでしょうか? #JavaScript

2010-08-23 00:01:16
think49 @think49

@os0x ありがとうございます。やはり、\s ではない方向で実装することにしました。#JavaScript

2010-08-23 00:09:33
Atsushi Takayama @edvakf

@think49 IE の仕様に関するページがあるかどうかは存じ上げません。そういうことをつぶやいてたのは taku_eof さんだったかなと思ったんですが、うろ覚えです。ごめんなさい。http://j.mp/9mQNr4

2010-08-23 00:19:14
think49 @think49

@edvakf ありがとうございます。taku_eof さんのログも確認してみますね。

2010-08-23 00:33:09
think49 @think49

LineTerminatorの文字クラスが誤っていたので訂正。LineTerminator は [\u000A\u000D\] で構成される。手元のテキストは合っているのだけど、投稿ミスかな…?#JavaScript

2010-08-23 01:02:22
think49 @think49

なぜだ……。¥u2028¥u2029 (バックスラッシュは半角) を投稿すると、バックスラッシュ(\) に変換されてしまう……。OTL

2010-08-23 01:06:13