• ベストアンサー

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