• ベストアンサー

JavaScriptの正規表現について

お世話になります。 HTMLでテキストに入力された数値のチェックを下記のようにJavaScriptで行っています。 ---------------------------------------------------------  function check_num(obj) {')   obj_w = document.form_name.elements[obj];')   if(obj_w.value.match(/^\d{0,1}(\.\d{1,3})?$/)){    return 0;   else{    alert("測定値は整数部分1桁、小数部分3桁までの正の数値を入力して下さい。")    obj_w.focus();    return 1;   }  } ----------------------------------------------------------- このとき、チェックする整数部分、小数部分の桁数を変数にして汎用性のある関数にしたいのですが、正規表現のなかで変数を使うにはどのようにしたらよいのでしょうか? よろしくお願い致します。

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

  • ベストアンサー
  • auty
  • ベストアンサー率58% (284/486)
回答No.1

・ RegExpクラスを使ってみました。 ・ 関数check_numの引数objは、文字列が与えられたときは、idの値と解釈して処理しています。 以下のコードを参考にしてみてください。 ------------------------------------------------------------ <html> <head> <script type="text/javascript"> function check_num(obj,k1,k2) { if (typeof obj == 'string') obj = document.getElementById(obj); var pattern = new RegExp("^\\d{0," + k1 + "}(\\.\\d{1," + k2 + "})?$");   if (obj.value.match(pattern)) {    return 0;   } else {    alert("測定値は整数部分1桁、小数部分3桁までの正の数値を入力して下さい。");    obj.focus();    return 1;   } } </script> </head> <body> <input type="text" id="num1" /> <br> <button onclick="check_num('num1',1,3)">チェック</button> </body> </html>

omatudon
質問者

お礼

回答ありがとうございました。 勉強不足で教えて頂いた内容がすぐに理解できなかったのでいろいろ 調べてみました。javascriptにはRegExpクラスというものが用意され ていて、上記の書き方(new ~)でそのクラスのオブジェクトを作る事 ができ、それを利用するということなのでしょうか。 javascriptも使ってみたばかりでクラスというものの概念がまだもや っとした状態なのでこれを機にいろいろ勉強してみたいと思います。 大変参考になりました。ありがとうございました。

その他の回答 (1)

  • arexis
  • ベストアンサー率66% (66/99)
回答No.2

あと、各ブラウザへの配慮が必要なら 数値、数字の正規表現に \d は基本的に使わずに[0-9]を使う。 Netscape、Firefoxでは \d は 全角数字もマッチしますから。

omatudon
質問者

お礼

経験が浅いもので、恥ずかしながらブラウザの違いに対する配慮を全く考えていませんでした。 とても勉強になりました。 ありがとうございました。

関連するQ&A

  • 正規表現

    正規表現で身長、体重の入力チェックをしたいのですが、 うまくいきません。 ↓がんばったのですが。。 /^\d\d\d?\.?\d*$/ 整数部3桁まで、小数部はDBで1桁に丸めるので何桁でもOKです。 どなたかアドバイスをお願いします。

  • 入力値が小数なら、整数部・小数部の桁チェックをしたい。

    VB2005環境です。 テキストボックスに数値が入力された時、整数部分が4桁以上か、 小数部分が2桁以上になっている場合、警告メッセージを出したいと 考えています。 具体的には、 0.1→OK 99.9→OK 100.1→OK 0.01→NG 1001.9→NG 0.99→NG 1111→NG テキストボックスは数字以外の入力も許可しており、数字を 入力した場合だけのチェックです。 まずIsNumericで数値判定を行っているのですが、その後、上述の 小数桁チェックをどうしたら良いか悩んでいます。 また、99を入力した場合は99.0、09.1と入力した場合には9.1と、 整数部は一番左側に0があれば消し、小数部は未入力ならば".0"を 追加できたらと思っているのですが、うまくいきません。 実現するために必要な処理は、 ・入力値が数値か ・数値であれば、整数か、小数か ・整数部の桁チェック ・小数部の桁チェック(小数時) ・整数であれば、999.9の形になるよう変換 といったところかなと思うんですが、まず小数チェックで 躓いています。 参考にロジックを交えて教えていただけないでしょうか。 宜しくお願いします。

  • 入力チェック

    お世話になります。 JavaScriptでの正規表現で入力チェックをしたいのですが、うまくいきません。 以下のようなことをするのにはどうしたらよいのでしょうか? ■小数点のある数字の入力チェック 整数の最大桁数:6桁 少数の最大桁数:2桁 とします。 例:フィールドに以下を入力した場合 120.50 → OK 10000000.1 → NG 整数の桁数がオーバー 150.1478 → NG 小数の桁数がオーバー

  • 正規表現を使った小数入力チェック方法について

    Javaのjava.util.regex.Matcherクラスと java.util.regex.Patternクラスを使用して正規表現を使った 数値の入力チェックを行いたいと思っています。 行いたいチェックは下記の通りです。 【内容】 整数5桁以内で入力 小数部は1桁、ただし小数部は任意入力 例: 1234 => OK 12345 => OK 123456 => NG 12345. => NG 12345.1 => OK 12345.12 => NG 色々考えてみましたが 小数部が任意入力の事もあり、 うまく実現できずに困っています。 このような場合どのような正規表現を組めば良いでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • excelでの数値切り捨て、桁制限をひとつのセルで

    数字を入力した時に、切り捨てと同時に、桁数を揃えることは可能でしょうか 具体的には、 (入力) 12.34  →  012 整数が2桁あるので、小数点以下を切り捨て、頭に「0」をつけ3桁にする        1.23  →  1.2 整数が1桁なので、小数点以下第二位を切り捨て、3桁(3文字?)にする         0.12  →  .12 整数が「0」なので、小数点以下を3桁(3文字)を表示する となるようにしたいです。 入力規則で、[>9.99]0##;[>.99]#.#; と入れて試してみたのですが この場合、入力が「34.56」「3.45」等であると、切り捨てて欲しい部分を四捨五入してしまい (入力) 34.56 → 035   (034になってほしい)       3.45 → 3.5     (3.4になってほしい) となってしまいます。良い方法はあるでしょうか

  • 変数に格納できる桁数に制限はあるの?

    スカラー変数に格納できる桁数に制限はあるのでしょうか? 制限があるとすれば、どうすれば解除できるのでしょうか? 具体的には下記のような手順です。 小数15位まである数値(整数部は3桁)を変数($hoge)に代入する。 $hoge = 123.123456789012345; 次に、この変数を他の変数($fuga)に代入する。 $fuga = $hoge; さらにこの変数をSmarthに渡してブラウザに表示させると、小数点以下が12桁までしか表示されません。 どうすれば15桁をそのまま表示させることができるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • 有効桁数について

    たとえば整数の3桁割る4桁の場合の数値についてです。 レポートの表に数値を記入するとき,たとえば0.921,0.866,0.995,1.331と計算結果が続くとき 小数点以下の桁数を同じにしてはダメですか? やはり1.331は1.33と記入しないとダメなのでしょうか?私は小数点以下の桁数をそろえて記入したところその理由を問われたのですが,答えられませんでした.小数点以下の桁数をそをえてもいい時のわけを教えてください.   大変困ってます!!!

  • エクセルで整数表示と少数表示を混在させたい

    お世話になります。 集計用のファイルを作っています。 整数と、小数点以下1桁、2桁の数値が出てきます。 書式設定で小数点以下2桁まで表示するようにしたら、整数や小数点以下1桁の数値まで120.00とか25.50と表示されてしまい、見にくくなってしまいました。 小数点以下に0がつく場合は無視して、それぞれ120、25.5、3.25のように必要な桁数だけ表示させたいのですが、どうしたらよいでしょうか。

  • サンプルコードのコメントの意味が理解できません。

    『独習C 第3版』に下記問題とその解答コードがありますが、 解答コードの変数「d」を初期化している意味がコメントを読んでも分かりません。 初期化しないとどんな問題があるのでしょうか? 教えて下さい。 【問題】 文字列とdouble値と整数値を入力させ、これらの数値を読み込んだ後、 入力された文字数を表示するプログラムを作成してください。 【解答】 --------------------------------------------------------- /* apdC-115.c */ #include <stdio.h> int main(void) { char str[80]; /* 浮動小数点ルーチンが必ず使えるよう、何か浮動小数点数値 を使って、dを初期化しておく */ double d = 3.1415926; int i, num; printf("文字列、double型、整数を入力してください: "); scanf("%s%lf%d%n", str, &d, &i, &num); printf("読み込まれた文字数: %d", num); return 0; } --------------------------------------------------------- なお、自分の環境は、OSがVistaで、コンパイラがVC++2008です。

  • 入力チェックについて

    体重を入力するテキストボックスがあります。 整数部分と小数部分は分けないので、 入力できる種類は半角数字とドットです。 整数部分は3桁まで、小数点以下は第一位までとする 入力チェックをつけたいのですが、 整数部分と小数点部分を別々にチェックするにはどのような命令を使用すればよいでしょうか。 (60, 60.1 , 105 などのパターンが考えられると思います。)

専門家に質問してみよう