• ベストアンサー

Javascriptの正規表現で変数を利用する方法

入力データの文字数をチェックする汎用JavaScript関数を作りたいのですが、正規表現の中で変数を利用する方法がわからなくて困っています。 すみませんが分かる方がいらっしゃいましたら教えてください。 よろしくお願いします。 //================================ //入力データチェック関数 checkfield //引数1 data 入力データ //引数2 number 文字数 //================================ function checkfield(data, i) { if(data.match(/^[0-9]{number}$/)!=-1){ alert('NG'); }else{ alerl('OK'); } }

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

  • ベストアンサー
  • ittochan
  • ベストアンサー率64% (2667/4137)
回答No.2

どうでしょうか? <HTML> <HEAD> <TITLE>ヘ(・、ヘ)ホイホイ(ノ、・)ノホイホイ</TITLE> <SCRIPT LANGUAGE=javascript> <!-- function button1_onclick() { stra = text1.value checkfield( stra , stra.length ) } //================================ //入力データチェック関数 checkfield //引数1 data 入力データ //引数2 number 文字数 //================================ function checkfield(data, number) { var re = new RegExp("^[0-9]{" + number + "}$"); if(data.match(re) == null ){ alert('NG'); }else{ alert('OK'); } } //--> </SCRIPT> </HEAD> <BODY> <P>例:入力データが数値なのか判断する</P> <P><INPUT id=text1 name=text1 ></P> <P><INPUT id=button1 type=button value=test name=button1 LANGUAGE=javascript onclick="return button1_onclick()"></P> </BODY> </HTML>

tanicchi
質問者

お礼

お返事が遅くなってしまってすみません。 ittochan様の回答はとてもわかりやすく参考になりました。 ありがとうございました。 追伸: <TITLE>ヘ(・、ヘ)ホイホイ(ノ、・)ノホイホイ</TITLE> <-これ面白いですね。

その他の回答 (1)

noname#199778
noname#199778
回答No.1

あまり利用頻度の高くないオブジェクトですが、正規表現オブジェクトを利用すると良いような気がします。 引数がnumberでよければ、ちょっと回りくどい書き方ですが、 function checkfield(data, i) { wrd="^[0-9]"+number; //正規表現で検索する文字列を変数に格納 chk= new RegExp(wrd,"");//変数wrdを検索する正規表現オブジェクト「chk」を作成 if(data.match(chk)!=-1){ alert('NG'); }else{ alerl('OK'); } } こんな感じに、正規表現オブジェクトを作成して、それをマッチングの対象にすれば、変数を正規表現に利用できるようになると思います。 正規表現にオプションをつけたい場合は、「new RegExp()」の第二引数に"g"などのように追加すれば、オプションもつけられます。 チェックしていないので、うまくいくかは少々自信なしですが… 参考になれば幸いです。

tanicchi
質問者

お礼

回答が遅くなってしまって申し訳ございません。 perl等と違い、正規表現を記述するためのオブジェクトというのがあるとは知らなかったので、とても助かりました。 はじめは正規表現オブジェクトの使い方に戸惑いましたが今では大分慣れ、オブジェクト故のメリットも分かるようになりました。 本当にありがとうございました。

関連するQ&A

  • 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;   }  } ----------------------------------------------------------- このとき、チェックする整数部分、小数部分の桁数を変数にして汎用性のある関数にしたいのですが、正規表現のなかで変数を使うにはどのようにしたらよいのでしょうか? よろしくお願い致します。

  • 正規表現内に変数を使用する方法

    match() や replace() の第1引数に文字列ではなく正規表現を使用 できますがこの正規表現内に変数を使用する場合、どうやったらよいの でしょうか。 var str = 'てすと'; alert(str.replace(/str/, 'テスト')); とすることができません。 (Perlではパターン内に変数が使用できるのですがJSでは変数が使用 できません) http://ar.aichi-u.ac.jp/blog/js-replace.html に書いてあるように第1引数に文字列を渡すと正規表現ではなくただの 文字とのマッチになってしまうようなので(確認済み)使えません。 面倒ですがリンク先にあるようにnew RegExpでRegExpオブジェクトを 作ってやる方法しかないんでしょうか。

  • JavaScriptで変数名を取得する方法

    var 変数名 = new 関数名(引数1,引数2・・・);とした場合 alert(変数名.○○)などで変数名を表示する○○はあるでしょうか? 現在は引数1に変数名をセットして、関数内のプロパティに保持して、 alert(変数名.id)で表示できるようにしています。 ただしこれでは手間がかかったり、間違いが起こります。 もしそうでない方法があればご教授下さい。

  • JBScriptの正規表現のマッチ文字を変数化

    初めての質問です。 質問用にプログラムを次の通りに作りました。実行すると OK と表示しますが、これを、文章に応じて表示させたいのです。本例の場合は、曇り20度、湿度60% です。 つまり、正規表現でマッチした文字を変数に代入して、その変数を用いて、msgbox出力したいのですが、どの様にコード(マッチ文字の変数化)を記述すれば良いのでしょうか? 本例でいえば、曇りを変数xに、20を変数yに、60を変数zに取り込めるようにしたいのです。 質問用なので、プログラムの意味はこだわらないでください。 本番用では、"本日は曇り20度ですが、湿度60%でした。"は、関数の引数で可変の文章です。 質問が下手で済みません。よろしくお願いいたします。 【sample.vbsの内容】 if blnCheck("本日は曇り20度ですが、湿度60%でした。") then msgbox "OK" '曇り20度、湿度60% と表示させたい else msgbox "NG" end if Function blnCheck(strLen) Dim objRE Set objRE = new RegExp objRE.IgnoreCase = True objRE.pattern = "^本.*(晴)|(曇り)|(雨)\d\d.*湿度\d\d.*" blnCheck = objRE.Test(strLen) Set objRE = Nothing End Function

  • JavaScriptの変数について

    JavaScriptのソースで解らないところがあり、困っています。 ソースは下記の様なものなのですが、エラーが出ていません。 解らない点は2点有ります。 1. jにfalseを代入している箇所なのですが、セミコロンがないのは何故なのでしょうか? Chromeのデベロッパツール, FireFoxのFirebugで確かめてみたのですが、エラーとなっておらず、alertでfalseと表示されている状態です。 「j = !1」の箇所を即時関数の外に出すと、エラーとなります。 普通変数に代入する式の末尾はセミコロンをつけると思うのですが、 何故なのでしょうか? 2.また、jはvar j等のように変数の宣言をせずに使えているようなのですが、 普通即時関数内で宣言した変数のスコープは関数の外では使えないので、エラーとなると思うのですが、宣言せずに代入に使った変数はグローバル変数と解釈されるのでしょうか? どなたかお答え下さい。 --------------------------------- <script> (function() { j = !1 })(); alert(j); </script>

  • 正規表現について

    function df(){ var sty=0; if(!document.ad.ad1.value.match(/[^0-9]+/)){ sty=1; } if(sty){ alert("違います"); return false; } else{ return ture; } } 一点だけわかりません。 (/[^0-9]+/)です。 普通に[0-9]で数字のみにすればいいのに /とか^はなんの意味があるんでしょうか?

  • 正規表現について

    小数点以上3桁、小数点以下1桁までの数をチェックしたく次のようなスクリプトにしましたが、うまくいきません。 if (str.match(/[0-9]{2,3}[\.]?[0-9]?/)!=null){ // OK }else{ // NG } この正規表現では、"str='50a'"などが、私の浅はかな予想に反して、OKになってしまいます。 何が悪いかご教授よろしくお願いします。

  • javascriptでの正規表現について

    javascript正規表現にて正の整数および小数(半角のみ) を判別したいのですがうまくいきません。どうすればいいのでしょうか。<script language=javascript> function StrCheck(strSrc){ var value = strSrc.value; if (value.match(/[0-999]+¥.[0-99]/)==true){ alert("半角数字のみで入力して下さい"); } </script> ); 以上のようにつくってみましたが、半角でも全角でも「半角を入力してください」というメッセージがでてしまいます。これを全角のみでエラー表示がでるようにしたいのですがどうしたらよいのでしょうか。参考になるWEBページでもあれば教えてください。ご教授の程よろしくお願い申し上げます。

  • 正規表現について

    PHP5.2.4を使用しています。 任意の数の引数がある文字列をpreg_matchを使ってマッチさせたいのですが、 例えば"ENUM(ab,cd)"は ab と cd の2つの引数があるとします。 次のようなパターン文字列まではアイデアとして浮かんだのですが、 引数の最後は , がないので当然ですがマッチしません・・・ どのようにパターン文字列を記述すれば良いのでしょうか? $str = "ENUM(ab,cd)"; if (preg_match("/ENUM\(([^\,]+\,)+\)/", $str, $match)) { print "{$match[0]}<br>\n"; }

    • 締切済み
    • PHP
  • Javascript+PHPで変数を受け渡したい

    PHP変数の文字列データを、 <a href ="Javascript:xxx($data)">として、関数を実行させたときに、関数側での function xxx(data){ --データで指定されたhtmlへ移動したい } という方法は、実現できないのでしょうか。 Javascriptのエラーでデータの受け渡しができていないみたいなのですが、わかる方教えてください。

専門家に質問してみよう