Javascriptで16pt、20px、9em、などの文字列を数値と単位に分解するコードを探しています。コピペで使えて、クロスブラウザ対応の物を探しています。


きちんと探して自分で考えれば作成できそうなのですが、どうしても時間が足りません。お力をお貸しいただける方、よろしくお願いいたします。


*コピペして使えるコードだけを探しています。
*作成の方法や概念、参考情報だけの投稿は必要ありません。

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2010/10/14 17:59:43
  • 終了:2010/10/14 20:27:54

ベストアンサー

id:Cherenkov No.1

Cherenkov回答回数1502ベストアンサー獲得回数4922010/10/14 18:29:23

ポイント40pt

動くサンプル http://jsfiddle.net/Ln9Vk/

こんな感じでどうですか。

bunkai関数は、正規表現で数字と単位を分けて、num・tanniが入ったオブジェクトを返します。

function bunkai(str) {
  var tmp = /(\d+)(\D+)/.exec(str);
  return {
    num: tmp[1],
    tanni: tmp[2]
  }
}

var s1 = '16pt';
var s2 = '20px';
var s3 = '9em';

var bs1 = bunkai(s1);
var bs2 = bunkai(s2);
var bs3 = bunkai(s3);

alert(bs1.num);
alert(bs1.tanni);

//alert(bs2.num);
//alert(bs2.tanni);
id:ecmas

素早い回答ありがとうございます!サンプルまで用意していただけるなんて感激です!

IE8,FireFox,Safariで確認したところ大丈夫でした。後でマイナーバージョンも確認してみます。ありがとうございます。

2010/10/14 20:24:12

その他の回答(1件)

id:Cherenkov No.1

Cherenkov回答回数1502ベストアンサー獲得回数4922010/10/14 18:29:23ここでベストアンサー

ポイント40pt

動くサンプル http://jsfiddle.net/Ln9Vk/

こんな感じでどうですか。

bunkai関数は、正規表現で数字と単位を分けて、num・tanniが入ったオブジェクトを返します。

function bunkai(str) {
  var tmp = /(\d+)(\D+)/.exec(str);
  return {
    num: tmp[1],
    tanni: tmp[2]
  }
}

var s1 = '16pt';
var s2 = '20px';
var s3 = '9em';

var bs1 = bunkai(s1);
var bs2 = bunkai(s2);
var bs3 = bunkai(s3);

alert(bs1.num);
alert(bs1.tanni);

//alert(bs2.num);
//alert(bs2.tanni);
id:ecmas

素早い回答ありがとうございます!サンプルまで用意していただけるなんて感激です!

IE8,FireFox,Safariで確認したところ大丈夫でした。後でマイナーバージョンも確認してみます。ありがとうございます。

2010/10/14 20:24:12
id:popkirby No.2

ぽっか回答回数4ベストアンサー獲得回数02010/10/14 18:18:47

ポイント30pt

var str="120px"; // ここに調べたい文字列

var spltd = /(\d+)(\w+)/g.exec(str);

このとき、spltd[1]が数値、spltd[2]が単位になります。

ただ、取り出した数値は文字列扱いなので、数値として計算したいときは、

var val = parseInt( spltd[1] );

として、valを計算に使ってください。

また、数値を取り出すだけならparseInt(str)でも大丈夫です。

id:ecmas

ありがとうございます。これでいけそうです。

2010/10/14 20:26:24
  • id:ecmas
    追加情報です。

    popkirbyさんの解答のコピペは動きませんでした(FireFox+FireBugで確認)

    また、1.2emのように小数点がある場合に動きません。

    小数点対応の場合は

    function bunkai(str) {
    var tmp = /(\d+\.?\d*)(\D+)/.exec(str);
    return {
    num: tmp[1],
    tanni: tmp[2]
    }
    }

    これでいけます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません