• ベストアンサー

Javascriptで文字列操作

こんにちは。 strの右から2文字を取り出したいのですがうまくいきません。 どこが間違ってますでしょうか? strの文字列の長さはそのときによって違います。 function test(){ str="12345" alert(str = str.substr(-0,2)); }

質問者が選んだベストアンサー

  • ベストアンサー
  • wolv
  • ベストアンサー率37% (376/1001)
回答No.1

function test(){ str="12345" alert(str.substr(str.length-2)); } こうやるのが簡単だと思います。 ・-0は、負の数ではなく、0として扱われると思いますよ。 ・「alert("12345".substr(-1,2))」も「12」と表示されてしまいました。^^;

参考URL:
http://tohoho.wakusei.ne.jp/js/index.htm
piyora
質問者

お礼

こんばんわ!ありがとうございます。 ばっちりできました! なるほどなるほど、です。 とほほ、を参考に書いたんですけどだめで悩んでたんですよー。 助かりました☆

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.2

本来 substr は開始位置に負の値を指定することができ、   str.substr(-n, m) と記述すると、   str.substr(str.length - n, m) として処理されます(ECMAより)。 ところがIEでは、これが正常に作動しないのです。(少なくとも6.0ではそう) MSDNで確認したところ、substr で開始位置に負数が指定できる~という記述がないので、IEでは仕様が変更されているのかも知れません。 単なるバグかもしれませんが、各ブラウザで同じ処理がされないのは困るので、ここは substr ではなく slice を使った方が良さそうです。 slice でも開始位置に負数が指定できるので、   str.slice(-2) とすれば、右から2文字を取り出すことができます。 (IE 6.0 / NN 4.7, 6.2, 7.0 / Opera 6.0 確認済み)

piyora
質問者

お礼

ありがとうございます! なるほど、IEのバグだったんですねー。 サンプルのとおり書いてもできないはずです。 なるほど、sliceでもできますね。 原因がわかってすっきりです。 どうもありがとうございました☆

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • @がすでに含まれちゃってる文字列の操作

    perlで文字列中に@を使いたいときは ¥などでエスケープすればよいと思いますが、 (パラメタで受け取った)すでに@が入っている文字列の @までの文字列を切り取るにはどうすればよいでしょう。 どうぞ教えてください。よろしくお願いいたします。 たとえば、 $str1="aaa@bbb"; $str2=substr($str1,0,3); とやってもエラーになってしまいます。

    • ベストアンサー
    • Perl
  • javascriptでの文字列操作

    こんにちは。 javascriptでの文字列操作で躓いてしまったのでご教授ください。 例えば、 var str = "00000"; という文字列があったとして、これの2文字目を”1”に変更したいといった場合、javascriptではどのように操作するのが簡単でしょうか。 phpですと、 $str = "00000"; $str[1] = "1"; といった記述で操作できた記憶があるのですが、調べてみても同様の操作が見当たらず・・・。 文字列を分割して+で足すような感じの処理か、配列にして繰り返し処理といった感じになってしまうのでしょうか。 宜しくお願い申し上げます。

  • 文字列の切り出し

    一応確認はしましたが、過去に似たような質問があったらすみませんが どうか教えて下さい。 今までOracleでコーディングしたことはありますが、postgresは初心者です。 文字列を右から切り出す関数はないでしょうか? 例えば、文字列「TEST」の末尾2文字を取りたいとき OracleのSQLで言えば substr( 'TEST', -2 ) ⇒ 'ST' が取れますが postgresではこういう風に使えないようです。 substr 以外の関数や、代わりにこうやる方法があるよと言ったことを教えて下さい。 お願い致します。

  • 文字列の操作について教えて下さい。

    Javaで文字列の操作をしたいと考えています。 String str1 = "あいうえおかきく"; String str2 = "あいうえお"; 上記のようなstr1、str2という文字列があるとします。 str1は、str2と同様の文字列を先頭から含んでいます。 str2と同じ文字を省き、それ以降の文字列を取り出して、 String str3 = "かきく"; という文字列を取り出す処理を行いたい、と考えています。 一般的には、どのようなロジックを組むのかと思い質問させて頂きました。 みなさんなら、どのようなプログラムか教えてください。 よろしくお願い致します。m(_ _)m

  • 文字列の先頭から指定バイトだけ取得

    質問があります。 1バイト文字が来ても2バイト文字が来ても 表示時に視覚的に同じ長さを返す関数が作りたいのですがうまくいきません。 $str1 = "あああaあ"; $str2 ="aaaaaaaaa"; function hoge($str) { return mb_substr($str, 0, 5); } これだと表示した場合に あああaあ aaaaa となってしまいます。 mb_substrをsubstrにすると2バイト文字の途中をsubstrで指定してしまうと文字化けしてしまいます。 何かうまい回避方法はないでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • substrの文字列の境界の動作について

    perl5.8を使っています。substrの動作について、以下の動作はperlの仕様どおりでしょうか? 以前、どこかのソースで#--1や #--2の場合はundefとなる?のを見た記憶があるのですが、文字列の境界の動作について理解していないのでよろしくお願いいたします。 $|=1; use strict; use Data::Dumper; my $str = "0123456789A"; print Dumper( substr($str, 10, 1) ); # $VAR1 = 'A'; print Dumper( substr($str, 11) ); # $VAR1 = ''; # --1 print Dumper( substr($str, 12) ); # substr outside of string at test.pl line ...  # --2 exit;

    • ベストアンサー
    • Perl
  • 文字列検索(例えばindex関数)をバイト単位で行いたい

    やりたいことは日本語文字列の処理で、特定の文字を切り抜きたいのですがうまくいきません。 なぜなら、文字列を切り抜くsubstr関数がバイト単位であるのに対し、文字列を検索するindexがバイト単位でおこなわれていないからです。 例: 文字列"12万3456円"から、円だけを取り除きたいとします。 $str = "12万3456円"; $index = index($str,"円"); $newStr = substr($str, 0, $index); indexは7を返すが、substrで0から7番目を切り取っても、バイト単位なのでうまくいきません。 文字列の検索をバイト単位で行う方法を教えてください。 おねがいします。

    • ベストアンサー
    • Perl
  • 文字列の検索について

    こんにちわ。文字列の検索について質問があります。 ↓のコードは、 「$str という文字列の中に"<!>" という文字列が含まれていたら、その都度その位置を 知らせる」と意図したものです。 $str の中に "<!>" が3つ含まれていたら、3回それらの位置を知らせるはずです。 しかし、実際は、最後の $iの位置だけ出力されます。 どこに問題があるのでしょうか? よろしくお願いいたします。 -------コード(ココカラ)------- for ($i=1; $i<length; $i++) { $strsub=substr($str, $i, $i+2); if ($strsub == "<!>") { echo $i; echo "\r\n"; } } -------ココマデ-------

    • ベストアンサー
    • PHP
  • javascriptで文字列の差分を取得

    var str1 = "abc"; var str2 = "abdec"; var str3 = "abcdef"; var str4 = "defgabc"; 元々の文字列文字数固定ではない(例として)「abc」がありまして、 その最初か最後か途中の文字列の間に何かしらの文字列が入る可能性があります。 そのように追加された文字列を割り出したいのですが、 どのようにしたら良いでしょうか?アイディアお持ちでしたらよろしくお願いします。

  • 文字列と配列の振る舞いの違いについて

    以下のコードで出るalertが Array => 12 String => 2 となります。この原因といいますか原理をご存じでしたら教えていただけませんでしょうか。お願いします。 =========================================================== var test = function(name){ this.arr.push(name); this.str += name; } test.prototype = { arr:[], str:"" } var r = new test("1"); var z = new test("2"); alert("Array => " + z.arr.join("") + "\nString => " + z.str);