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

ピリオド区切りで 4桁.2桁.2桁 という制限が出来なくて困っています。

テキストボックスに入力される文字列の形式を制限するために、Web上で見つけたサンプルソースを参考に、次のような形でJavascriptを挿入しました。

<script type="text/javascript">

/* ピリオドチェック */
function DotCheck() {
var str = document.form01.yukoduki.value;
if( str.indexOf( "." ) != 4) {
alert("1234.56.78 のように、ピリオド2つで区切ってご記入下さい");
document.form01.kakuninbutton.disabled = true; // 送信ボタン無効化;
return 1;
}
return 0;
}

/* 2つめのピリオドチェック */
function DotCheck() {
var str = document.form01.yukoduki.value;
if( str.indexOf( "." ) != 6) {
alert("1234.56.78 のように、ピリオド2つで区切ってご記入下さい");
document.form01.kakuninbutton.disabled = true; // 送信ボタン無効化;
return 1;
}
return 0;
}

/* 半角数字チェック */
function NumberCheck() {
var str = document.form01.yukoduki.value;
if( str.match( /[^0-9\s.]+/ ) ) {
alert("半角数字と小数点のみで入力して下さい。");
document.form01.kakuninbutton.disabled = true; // 送信ボタン無効化;
return 1;
}
return 0;
}

/* 全部チェック */
function AllCheck() {
var check = 0;
check += NumberCheck();
check += DotCheck();
check += DotDotCheck(T);
if( check > 0 ) {
return false;
}
return true;
}

</script>

しかし、これだと、123.456.78 のように最初のピリオドまでと2つ目のピリオドまでの桁数は制限できますが、最後の桁は何桁でも入れ放題になってしまいます。

そこで、ピリオドのチェックを2つ入れるかわりに、まとめて桁数をチェックしようと次のようなソースをソースを考えたのですが、どうも私の知識不足で間違っているようで作動しません。

/*一括ピリオドチェック */
function DotDotCheck(T) {
var str = document.form01.yukoduki.value;
if( !str.match(/^?d(4).?d(2).?d(2)$/)) {
alert("1234.56.78 のように、ピリオド区切りで4桁.2桁.2桁でご記入下さい");
document.form01.kakuninbutton.disabled = true; // 送信ボタン無効化;
return 1;
}
return 0;
}

このソース、少し直すだけで、「ピリオド区切りで4桁.2桁.2桁になっていない場合はアラート」という目的を達成できないでしょうか?

直し方をお分かりの方がいらっしゃいましたらご教示頂きたく、どうかよろしくお願い致します。

A 回答 (5件)

レングスチェックを追加してみてはどうでしょうか?

    • good
    • 0
この回答へのお礼

早々のご回答をどうもありがとうございました。
私もレングスチェックの追加は考えたのですが、今までに作ってあるチェック機構が回りくどいので、そこに更にレングスチェックまで入れると、例えば 123.45.678 みたいな入れ方をされた場合はアラートがたて続けに3回も出ることになってしまうので、そこを何とかしたかったのです。

お礼日時:2010/06/18 22:45

頭からお尻まできちんとチェックすればいいのでは?



<script>
function DotCheck(obj) {
var v=obj.value;
if(v!=="" && !v.match(/^[0-9]{4}\.[0-9]{2}\.[0-9]{2}$/)){
alert("unmatch!");
obj.value="";
}
}
</script>
<input type="text" onblur="DotCheck(this)">
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
教えて頂いたソースを当てはめてみたら、完璧に目的を達することが出来ました。
私は本当に知識が浅く、 this というのをどういう時にどういう使い方をすればよいのかさえ理解しきっていないので、教えて頂いたこのソースでなぜ上手く行くのかがやはり理解しきれないのですが、おかげさまで直面している問題を解決することが出来ました!
どうもありがとうございました!

お礼日時:2010/06/18 22:53

function checker422( str ) {


return /^[0-9]{4}\.[0-9]{2}\.[0-9]{2}$/.test( str );
}

もしひづけのちぇっくなら、これだけだとやばいけど
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
す・すみません。頂いたご回答の応用の仕方が理解できませんでした…。

お礼日時:2010/06/18 22:55

2つめのピリオドチェックで


( str.indexOf( "." ) != 6)
となっていますが,これは「ピリオドの位置が左から6番目でなければ」という意味です。
なので,仰るとおり123456.7890123というように最後の桁は入れ放題になります。

lengthで最初に全体の文字列の長さを確かめ,次に半角文字のみであることを確認し,最後に1個目・2個目のピリオドチェックとするほうが確実だと思います。

あるいは,取得した文字列を変数に入れているので,グローバル変数を別の関数に引数として渡す方法もあるのでは,と思いますが,自信はないです。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
そうなんです。私の質問文が説明不足ではあるんですが、lengthを入れるのが確実ではあります。
ただ、ピリオドの位置について独立してアラートを出す形しか思いつかなかったので、そこに更にレングスチェックまで入ると、入力されたデータの形式によっては、まずレングスチェックのアラートが出て、「OK」をクリックしたらまたその場で1つ目のピリオドチェックでアラートが出て、そこで「OK」をクリックするとまたもや2つ目のピリオドのアラートが出て…と、非常に鬱陶しいスクリプトになってしまうのです。
そこで4桁.2桁.2桁をいっぺんにチェックできないかと思った次第です。

お礼日時:2010/06/18 23:01

f( !str.match(/^?d(4).?d(2).?d(2)$/))


おかしくない。

if(!str.match(/^\d{4}\.\d{2}\.\d{2}$/))
でよくないですか?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
まさにご指摘の通りでした!
「?」を使っていたのがいけなかったのですね。
問題が解決した上に、私のやり方のどこが間違っていたのかがはっきり解って、大変勉強になりました。
どうもありがとうございました!

お礼日時:2010/06/18 23:04

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