- ベストアンサー
ピリオド区切りで4桁.2桁.2桁の制限ができない
- 質問文章では、テキストボックスに入力される文字列の形式を制限する方法について述べています。
- 現在のソースコードでは、ピリオド区切りで4桁.2桁.2桁の制限を実現できていません。
- 新しいソースコードを考える必要がありますが、提供されたソースコードにはいくつかの誤りがあります。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
f( !str.match(/^?d(4).?d(2).?d(2)$/)) おかしくない。 if(!str.match(/^\d{4}\.\d{2}\.\d{2}$/)) でよくないですか?
その他の回答 (4)
- LTCM1998
- ベストアンサー率31% (238/746)
2つめのピリオドチェックで ( str.indexOf( "." ) != 6) となっていますが,これは「ピリオドの位置が左から6番目でなければ」という意味です。 なので,仰るとおり123456.7890123というように最後の桁は入れ放題になります。 lengthで最初に全体の文字列の長さを確かめ,次に半角文字のみであることを確認し,最後に1個目・2個目のピリオドチェックとするほうが確実だと思います。 あるいは,取得した文字列を変数に入れているので,グローバル変数を別の関数に引数として渡す方法もあるのでは,と思いますが,自信はないです。
お礼
ご回答ありがとうございます。 そうなんです。私の質問文が説明不足ではあるんですが、lengthを入れるのが確実ではあります。 ただ、ピリオドの位置について独立してアラートを出す形しか思いつかなかったので、そこに更にレングスチェックまで入ると、入力されたデータの形式によっては、まずレングスチェックのアラートが出て、「OK」をクリックしたらまたその場で1つ目のピリオドチェックでアラートが出て、そこで「OK」をクリックするとまたもや2つ目のピリオドのアラートが出て…と、非常に鬱陶しいスクリプトになってしまうのです。 そこで4桁.2桁.2桁をいっぺんにチェックできないかと思った次第です。
- babu_baboo
- ベストアンサー率51% (268/525)
function checker422( str ) { return /^[0-9]{4}\.[0-9]{2}\.[0-9]{2}$/.test( str ); } もしひづけのちぇっくなら、これだけだとやばいけど
お礼
ご回答ありがとうございます。 す・すみません。頂いたご回答の応用の仕方が理解できませんでした…。
- yambejp
- ベストアンサー率51% (3827/7415)
頭からお尻まできちんとチェックすればいいのでは? <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)">
お礼
ご回答ありがとうございます。 教えて頂いたソースを当てはめてみたら、完璧に目的を達することが出来ました。 私は本当に知識が浅く、 this というのをどういう時にどういう使い方をすればよいのかさえ理解しきっていないので、教えて頂いたこのソースでなぜ上手く行くのかがやはり理解しきれないのですが、おかげさまで直面している問題を解決することが出来ました! どうもありがとうございました!
- duron
- ベストアンサー率77% (73/94)
レングスチェックを追加してみてはどうでしょうか?
お礼
早々のご回答をどうもありがとうございました。 私もレングスチェックの追加は考えたのですが、今までに作ってあるチェック機構が回りくどいので、そこに更にレングスチェックまで入れると、例えば 123.45.678 みたいな入れ方をされた場合はアラートがたて続けに3回も出ることになってしまうので、そこを何とかしたかったのです。
お礼
ご回答ありがとうございます。 まさにご指摘の通りでした! 「?」を使っていたのがいけなかったのですね。 問題が解決した上に、私のやり方のどこが間違っていたのかがはっきり解って、大変勉強になりました。 どうもありがとうございました!