アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (3件)

「/[^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))
のようにインスタンスを設定するケースもあります
    • good
    • 0

うむ。

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文字以上続く」というのにマッチするようになる。
正規表現の色々な書き方には全て意味があり、正直それらは人間が定義したものなので「なぜ」というのにはあまり明確な回答ができない。そういうもんになるように人間がそう決めたんだよとしか。
    • good
    • 0

認知科学的には


if(!document.ad.ad1.value.match(/[^0-9]+/))
ではなく
if(document.ad.ad1.value.match(/^[0-9]+$/))
とすべきところでしょう.

そもそも何のための変数 sty なのかさっぱり分かりませんが.
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!