C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: TextBoxの入力制限


(過去ログ 37 を表示中)

[トピック内 11 記事 (1 - 11 表示)]  << 0 >>

■18641 / inTopicNo.1)  TextBoxの入力制限
  
□投稿者/ 猫 (7回)-(2008/05/15(Thu) 10:55:03)

分類:[ASP.NET (C#)] 

利用者に、テキストボックスに登録内容を書いて貰うようなWevアプリを作っているのですが、その入力の際に「半角英数字のみ入力可能にする」ような制限を作りたいのですが、可能でしょうか?

ボタンのクリックイベントで、テキストボックスの中身を参照してエラーメッセージを出すようなものなら、いくつか実例が検索できたのですが、キーを押した瞬間にそれが「半角英数字でないようならはじく」もしくは、もとから「そのテキストボックスでは半角英数字のみした入力できないようにする」というような事を実現させるような実例が探し出せなかったので・・・。

基本的な事でしたら申し訳ありませんが、本当に困っています。
御助力をお願いいたします。
引用返信 編集キー/
■18645 / inTopicNo.2)  Re[1]: TextBoxの入力制限
□投稿者/ 774RR (175回)-(2008/05/15(Thu) 11:21:48)
それがユーザーのアクセシビリティの向上につながるかどうか非常に疑問なので
やらないほうがいい、と俺なら判断する

長いメールアドレスとかはIMEに登録してあったりとかするだろうし
キーボード入力だけチェックするとペーストされちゃうことが防げないし
やる努力に対して結果が報われないので

セキュリティ的に英数字しか受け付けないべきである、なら
クライアント側でチェックしても無駄で、サーバーサイドでのチェックが必須
引用返信 編集キー/
■18646 / inTopicNo.3)  Re[2]: TextBoxの入力制限
□投稿者/ 猫 (9回)-(2008/05/15(Thu) 11:26:35)
2008/05/15(Thu) 11:49:21 編集(投稿者)
2008/05/15(Thu) 11:26:50 編集(投稿者)

No18645 (774RR さん) に返信
> それがユーザーのアクセシビリティの向上につながるかどうか非常に疑問なので
> やらないほうがいい、と俺なら判断する

> セキュリティ的に英数字しか受け付けないべきである、なら
> クライアント側でチェックしても無駄で、サーバーサイドでのチェックが必須

そうですか・・・。
私としては、ある程度早い段階でエラーの防止策を張っておいた方がいいと思ったのですが、そういう考えもあるのですね。
アドバイスありがとうございます。
参考にして、再度構成を考えてみようと思います。

改めまして、ありがとうございました。
引用返信 編集キー/
■18651 / inTopicNo.4)  Re[3]: TextBoxの入力制限
□投稿者/ 774RR (176回)-(2008/05/15(Thu) 11:38:40)
アクセシビリティ(使い勝手のよさ)とセキュリティとは話の次元が異なるわけで。

アクセシビリティ向上のために何かするとしたらIMEのON/OFFくらいにとどめておくほうがいい
と、俺は思うわけよ。

これとはまったく別で、セキュリティの話をするなら、
クライアントサイドでチェックしたからサーバー側では何のチェックもしませんでした
では即SQLインジェクション脆弱性とかが発生するわけさ。
攻撃者は IE/Firefox 等のメジャーなブラウザを使うとは限らなくて、
自作のツールで http 直接話しかけてくるかもしれないわけだし
解決済み
引用返信 編集キー/
■18653 / inTopicNo.5)  Re[3]: TextBoxの入力制限
□投稿者/ はつね (691回)-(2008/05/15(Thu) 11:40:49)
はつね さんの Web サイト
No18646 (猫 さん) に返信
>>セキュリティ的に英数字しか受け付けないべきである、なら
>>クライアント側でチェックしても無駄で、サーバーサイドでのチェックが必須
>
> そうですか・・・。
> 私としては、ある程度早い段階でエラーの防止策を張っておいた方がいいと思ったのですが、そういう考えもあるのですね。

早い段階でのエラーチェックは利用者にすばやくエラーを通知する(わざわざサーバまで問い合わせる時間をなくす)ためで、
セキュリティのためではありません。
クライアント側のチェックは回避されますから、サーバー側でのチェックは必須です。
これは、考え方の相違などでやるやらないを判断すべき事柄でありません。

あと、半角英数字ではなく「英数字しか受け付けない」と回答に書かれている点も気にして下さい。
半角・全角の違いなんて利用者にとっては無意味です。それこそシステム側が内部的に半角に変換するなどして上げた方が
いいです。だって「全角です。入れなおしてください。」って表示して利用者が入れなおすなんておかしくありませんか?
# こっちは、考え方の相違もあるかも知れませんが。

解決済み
引用返信 編集キー/
■18655 / inTopicNo.6)  Re[1]: TextBoxの入力制限
□投稿者/ いしだ (119回)-(2008/05/15(Thu) 11:44:54)
ご参考まで。

AJAX Control ToolkitにFilteredTextBoxというのがあります。
http://asp.net/AJAX/AjaxControlToolkit/Samples/FilteredTextBox/FilteredTextBox.aspx

AJAXを使えるようでしたら。。。
解決済み
引用返信 編集キー/
■18657 / inTopicNo.7)  Re[4]: TextBoxの入力制限
□投稿者/ 中博俊 (1294回)-(2008/05/15(Thu) 11:46:38)
中博俊 さんの Web サイト
本題解決してないし・・・

KeyPressイベントではじけると思うよ。
それとチェックとはべつもんだいなので、チェックは必ず入れてください。
引用返信 編集キー/
■18676 / inTopicNo.8)  Re[2]: TextBoxの入力制限
□投稿者/ 猫 (10回)-(2008/05/15(Thu) 12:58:55)
2008/05/15(Thu) 12:59:47 編集(投稿者)
2008/05/15(Thu) 12:59:36 編集(投稿者)

No18651(774RR さん)に返信
No18653 (はつね さん) に返信
No18657 (中博俊 さん) に返信

私の言葉が足りませんで、誤解を生んでしまったようです。

私としましては、テキストに入力する際に半角英数字のみ入力可能にしてエラーの防止策をとり、ボタンのクリックイベントで改めてエラーチェックをする形を前提としています。

>>システム側が内部的に半角に変換するなどして上げた方が
>>いいです。だって「全角です。入れなおしてください。」って表示して利用者が入れなおすなんておかしくありませんか?
>># こっちは、考え方の相違もあるかも知れませんが。

「内部的に半角に変換する」を実現したくて、質問をさせて頂いていましたので・・・・。
私は774RRさんが「クリックイベントでチェックだけの方が、利用者の使い勝手がいい」という意味で返信頂いたのだと勘違いをしてしまい、「解決済み」のチェックをつけてしまいました。
やりようがあるのなら、是非教えて頂きたいのです。

No18655 (いしだ さん) に返信

参考URLの紹介ありがとうございます。
しかし、すみません。
私には扱いかねるようです…。
引用返信 編集キー/
■18684 / inTopicNo.9)  Re[3]: TextBoxの入力制限
□投稿者/ はつね (695回)-(2008/05/15(Thu) 13:32:35)
はつね さんの Web サイト
No18676 (猫 さん) に返信
> 「内部的に半角に変換する」を実現したくて、質問をさせて頂いていましたので・・・・。

ボタンクリックなどのイベントが発生したらサーバーサイドで全角半角変換すれば実現できます。
イベントとしては、テキストボックスに入力が終わったときの利用者操作による
イベント(例えば[登録]ボタンのクリック)が良いかと思います。

1文字1文字やるのであれば、AJAXでKeyPressイベント使ってという事になるかと。
# AJAX使わないと1文字1文字入力するごとにページ全体のPostBackが発生して使いづらいはず。

あと、入力文字を英数字だけにしたいというのは、JavaScriptなどでクライアントサイドで抑止するのと、
サーバーサイドで上記の全角半角変換する直前あたりで英数字チェックすれば良いかと。

引用返信 編集キー/
■18750 / inTopicNo.10)  Re[4]: TextBoxの入力制限
□投稿者/ ま (33回)-(2008/05/16(Fri) 02:46:36)
2008/05/16(Fri) 03:08:12 編集(投稿者)
2008/05/16(Fri) 02:53:33 編集(投稿者)
<pre><pre>2008/05/16(Fri) 02:52:58 編集(投稿者)
2008/05/16(Fri) 02:50:41 編集(投稿者)
<pre><pre>2008/05/16(Fri) 02:50:32 編集(投稿者)

<pre><pre>■No18684 (はつね さん) に返信
> ■No18676 (猫 さん) に返信
>>「内部的に半角に変換する」を実現したくて、質問をさせて頂いていましたので・・・・。

<script>
function HankakuSeigen() {
   var v = String.fromCharCode(event.keyCode);
   var a = !!v.match(/[A-Z|a-z|0-9]/);
   document.getElementById("OK").value = v + "=>" + a;
   event.returnValue = a;
   event.cancelBubble = a;
}
</script>
</HEAD>
<BODY>
<input type=text maxlength=12 size=60 onkeypress="HankakuSeigen()" />

<input type=text id="OK">
</BODY>

で、皆さんの懸念は、6文字入力した状態で、カーソルを3文字目にしておいて、
予めコピーっといた、「漢字」2文字をペーストすると、keypress イベントは
発生しませんってこと。他にも例外があるだろうけど、完全に捌くことはとても
骨が折れるのでクライアントの入力制限は止めましょうよ、と、なるわけです。
タイマーで監視したり、keypress と keydown 併用したり、「c-v」だけを無効
にしたり。。。etc...

> 1文字1文字やるのであれば、AJAXでKeyPressイベント使ってという事になるかと。
> # AJAX使わないと1文字1文字入力するごとにページ全体のPostBackが発生して使いづらいはず。
半角しか入れられないってのが客先の要望?であって、漢字コードの自動変換までは意図してない
のではないかと。ユーザビリティっていう面で言うと、大抵のお客さんは、半角入力前提のフィールド
だから逆に ime-disabled してくれ、って言われることの方が、うちの周りでは多くみられる。
あやっくすなんて言おうもんなら、「余計なことすんな」って怒られちゃうしw

でも、あやっくすで1文字ポストバックやっても、昼飯時の回線の心細さったら無いでしょう。
営業なんかは昼飯時がデータ入力の一番気合が入る時間帯でしょうし。>これもうちの周りだけ。
鯖ログ見ると、12:30 (昼飯終わり)〜12:55 (昼後仕事入る前)がサーバー負荷が一番高かったり。
しかも一番重い顧客データ更新作業ばっかり。


> 
> あと、入力文字を英数字だけにしたいというのは、JavaScriptなどでクライアントサイドで抑止するのと、
> サーバーサイドで上記の全角半角変換する直前あたりで英数字チェックすれば良いかと。
>
なんにしても、クライアントだけで終わりってのは皆さん口酸っぱく仰っているのでスレ主さん
も理解しているかと。


#JavaScriptを扱っている専門ページは一杯あるのでまずはそこで検索調査すべし。

訂正:
×event.cancelBubble = a;
○event.cancelBubble = !a;
訂正ばっかし:
図表モードし忘れ
更に訂正:
×クライアントの入力制限は止めましょうよ
○入力フィールド個々の入力制限はやめましょうよ
 </pre></pre></pre></pre></pre></pre>

引用返信 編集キー/
■19022 / inTopicNo.11)  Re[5]: TextBoxの入力制限
□投稿者/ 猫 (11回)-(2008/05/19(Mon) 11:56:18)
返信遅くなりまして、申し訳ありません。

皆様のご意見を参考に、
・テキストボックス入力時のチェックは行わない。
・クリックイベント時に半角への変換を行う。
・クリック時に(検証するテキストボックスには数値のみ入力したいので)テキストボックス内の文字列検証。
を行おうと考えております。

自分なりに活路が開けたと認識いたしましたので、この問題は解決したと結論をつけさせて頂きます。

皆様、本当にありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -