javascriptで文字列の前後のスペースを削除するには

[上に] [前に] [次に]
しの [E-Mail] 1999/11/08(月) 15:53:54
JavaScriptで文字列の前後のスペースを削除するやり方を知っていたら教えて下さい(VBやJAVAのtrimに相当するもの)。stringオブジェクトのメソッドには見あたらないようなんですが。

バーチャルヒューマン [HomePage] 1999/11/08(月) 17:14:35
こんなふうに自作するというのは

while ( str.charAt(0) == "\x20" )
 str = str.substring(1,str.length);

※これだと、先頭のスペースしかとれませんが・・・あとは、アレンジして。

でも、多分、なんかの関数でってことかなぁ?

バーチャルヒューマン 1999/11/08(月) 18:08:03
↓ ここにありました。JavaScript1.2以降で実装
http://developer.netscape.com/docs/manuals/js/client/jsref/string.htm#1194258

上記コンテンツに以下の例が載ってました。なにやら、正規表現が使えるような...
<SCRIPT>
re = /apples/gi;
str = "Apples are round, and apples are juicy.";
newstr=str.replace(re, "oranges");
document.write(newstr)
</SCRIPT>
結果は
This prints "oranges are round, and oranges are juicy."

しの [E-Mail] 1999/11/09(火) 00:36:17
stringのreplaceメソッドは、とほほのリファレンスにもあったので
すが、単にスペースを空文字に置き換えただけでは文字列中のスペ
ースも削除されてしまいます。正規表現を使う方法で前のスペース
を削除するのは思いついたんですが、

str = "  Apples are round  ";
newstr=str.replace("\B".leftContext, "");

後のスペース削除のよい方法が思いつきません。
後ろから1文字ずつ調べていくしかないんでしょうか?

本当はVBやJAVAのtrimのように一発でできる関数みたいなのが欲しいところなんですが。
これって結構需要があると思うんですが、みなさんどうやっているのでしょうか?
やはり自前で関数作るしかないんでしょうか?

時司 1999/11/09(火) 05:46:51
たとえ、関数が新しいブラウザーで出てきたとしても、古いブラウザーでエラー起こすのがおちでしょうからそこら辺考えて作ったほうが話早いんでないでしょーかね〜。
互換性を重視するのであれば・・・

Mugi [E-Mail] [HomePage] 1999/11/09(火) 08:09:58
正規表現の置換ですよね。
こんなかんじでいいのでは。
^ と $ を使っているだけ。
str = " Apples are round "
newstr=str.replace(/^\s+|\s+$/g, "")

Aurai [E-Mail] 1999/11/09(火) 08:19:29
じゃ、私は古い方法(笑)をひとつ
str = '   string   ';
strstart = 0;
for (i = 0; i < str.length; i++) {
  if (str.substring(i,i+1)==' ')
    strstart++;
  else
    break;
}
strend = str.length;
for (i = strend; i >= 0; i--) {
  if (str.substring(i-1,i)==' ')
    strend--;
  else
    break;
}
str = str.substring(strstart,strend);

Mugi [E-Mail] [HomePage] 1999/11/09(火) 10:19:08
berakはJavaScript1.2からですよね。
もっと古いバージョンに対応させるなら、こうかな。
バーチャルヒューマンさんの方法に似ています。

str="  Apples are round "
while(str.charAt(0)==" "){str=str.substring(1,str.length)}
while(str.charAt(str.length-1)==" "){str=str.substring(0,str.length-2)}

zizz... [HomePage] 1999/11/09(火) 11:01:43
> berakはJavaScript1.2からですよね。
breakの事でしょうが、
breakはJavaScript 1.0で実装されています。
http://developer.netscape.com/docs/manuals/js/client/jsref/stmt.htm#1050033

下級天使 1999/11/09(火) 14:25:25
str = " Apples are round ";
xx = str.match(/\s*(.*?)\s.*$/);
document.write("["+RegExp.$1+"]" + "<BR>");

こんなのはどうでしょうか?

時司 [E-Mail] [HomePage] 1999/11/09(火) 17:20:49
ちょっと暇つぶしに・・・
古いほうで・・・(笑)

function test(x,del_word){
//関数 test(x.del_word)
//入力文字列     :x
//削除対象文字   :del_word
//返り値(文字列) :tmp.ext
//※但し、ASCIIコードだけ対応
var tmp = new Object();
        tmp.len = str.length;
        tmp.str = x;
        tmp.ext = "";
        for (i=0;i <= tmp.len;i++){
                if(del_word == tmp.str.charAt(i)){
                        i++;
                }
tmp.ext += tmp.str.charAt(i);
        }
return tmp.ext;
}

関数にしたらこんなもんですな・・・

Mugi [E-Mail] [HomePage] 1999/11/09(火) 21:28:37
> breakはJavaScript 1.0で実装されています。
また勘違いしてました。(^^;;;
ラベル名指定breakと混乱していたようです。

時司 1999/11/09(火) 23:05:03
うーむ さっきのスクリプトだと、対象文字全部消去してしまうわ・・・(^^;

str ="    This apple round.    and apple is juicy. "
document.write(str);


とやったばやい・・・

This apple round. and apple. and apple is juicy.

このように整形された状態で出力されてます(ie5.0,nn4.7の場合)
スペースが倍角であった場合スペースが出てきますけど・・・
となると、問題なのは倍角スペースかしら?

時司 1999/11/09(火) 23:06:14
strのランダムにスペース入れたんだけど埋まってしまう・・・(^^;

しの [E-Mail] 1999/11/10(水) 13:22:11
[[解決]]
どうやらtrimと同じような関数みたいなのはないようですね。
でもMugiさんのnewstr=str.replace(/^\s+|\s+$/g, "")
を使えばかなり簡潔に書けるので使わせて頂こうと思います。
他のみなさんの発言も非常に参考になりました。
ありがとうございました。

[上に] [前に] [次に]