• ベストアンサー

正規表現について

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]で数字のみにすればいいのに /とか^はなんの意味があるんでしょうか?

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

「/[^0-9]+/」については /[^○-×]/で○から×の範囲以外という意味なので 0-9(数字)以外の文字に1文字以上(+が意味する)ヒットするという意味つまり 数字以外の文字があったら、という意味です。 そういう意味では、「/[^0-9]/」だけでよいですね ちなみに >if(!document.ad.ad1.value.match(/[^0-9]+/)) という正規表現の否定を使っているので 数字以外にマッチしない→数字のみでできていればという書式ですが 否定を使わずに if(document.ad.ad1.value.match(/^[0-9]+$/)) というように、最初から最後まで1文字以上の数字でできているという 書き方も一般的です。 なおjavascriptにおける正規表現の文法は //で囲んだものがパターンとなるのでちょっとわかりづらいため var reg=new RegExp("[^0-9]"); if(document.ad.ad1.value.match(reg)) のようにインスタンスを設定するケースもあります

その他の回答 (2)

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.3

うむ。JavaScriptで文字をあらわす時には普通ダブルコーテーション「"」という文字を使うよね。 "aaa" ところが、String.match(pattern)のpatternは文字をあらわすはずなのにダブルコーテーションがない! JavaScriptで「この部分は正規表現ですよ」という事をあらわす時に、スラッシュ「/」を使うのだ。つまり、正規表現を書くときの決まりごとと言える。なぜそう決まったかは歴史的経緯もあるがここでは割愛。とにかく、なんで「/」か、というのは、日本語で犬を犬と言うようにそういうもんなんだと思ってくれ。 で、次にハット「^」だが、これは正規表現においては2つの意味がある。 ・正規表現パターンの先頭にあらわれた場合は、「先頭にマッチする」という意味になる。 ・正規表現パターンの途中にあらわれた場合は、「このハットの次の文字以外にマッチする」という意味になる。質問文の中ではこれは後者を表し、 /[^0-9]+/ というのは、半角ゼロから半角キュウ「以外」の文字が一文字以上続く文字列にマッチするという意味になる。つまり、 document.ad.ad1.value.match(/[^0-9]+/) はdocument.ad.ad1.valueに0123456789以外の文字が入っていたらtrueとなり、びっくりがつくのでifはその逆になるわけだな。 先ほどのハットだが、例えば document.ad.ad1.value.match(/[^0-9]+/) を document.ad.ad1.value.match(/^[0-9]+/) とすると、「先頭から0123456789が1文字以上続く」というのにマッチするようになる。 正規表現の色々な書き方には全て意味があり、正直それらは人間が定義したものなので「なぜ」というのにはあまり明確な回答ができない。そういうもんになるように人間がそう決めたんだよとしか。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

認知科学的には if(!document.ad.ad1.value.match(/[^0-9]+/)) ではなく if(document.ad.ad1.value.match(/^[0-9]+$/)) とすべきところでしょう. そもそも何のための変数 sty なのかさっぱり分かりませんが.

関連するQ&A