- PR -

テキストボックスに入力制限をかけたい

投稿者投稿内容
hana
ベテラン
会議室デビュー日: 2003/02/08
投稿数: 70
投稿日時: 2004-12-27 20:22
皆さんこんばんわ。
よろしくお願いします。

VB.NETでWEBアプリケーションを開発しています。

テキストボックスに以下のような入力制限をかけたいのですが、
1.半角英数字のみ入力可
2.記号は「'(シングルコート)」以外入力可
設定の仕方がわかりません。

初歩的な質問で申し訳ありませんが、
どなたかご存知の方、ご教授よろしくお願いします。

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-12-27 22:28
引用:

hanaさんの書き込み (2004-12-27 20:22) より:

VB.NETでWEBアプリケーションを開発しています。

テキストボックスに以下のような入力制限をかけたいのですが、
1.半角英数字のみ入力可
2.記号は「'(シングルコート)」以外入力可
設定の仕方がわかりません。


 Webアプリでは、原則出来ません。その代わり、Validatorコントロールを使って、入力のチェックをして、違反した入力がないか調べます。Validatorコントロールについては、ここ(@IT)のTipsにあります。
_________________
お獅子
大ベテラン
会議室デビュー日: 2004/09/14
投稿数: 160
投稿日時: 2004-12-28 10:24
JavaScriptを使用すれば可能です。

例1:
@Page_Load時にJavaScriptを生成
Dim scriptstring As New StringBuilder
With scriptstring
.Append("<SCRIPT language='JavaScript' src='Test.js'>")
.Append("</SCRIPT>")
End With
If Not IsClientScriptBlockRegistered("clientScript") Then
RegisterClientScriptBlock("clientScript", scriptstring.ToString)
End If

A初回イベント発生時にテキストボックスの「onKeyPress」イベントを作成します。
Me.TextBox.Attributes("onkeyPress") = "CheckNum()"

BJScriptファイルを作成し、下記スクリプトを記述します。
test.js:
function CheckNum()
{
if (((event.keyCode < 48) || (event.keyCode > 57)) && (event.keyCode != 45) && (event.keyCode!=46)){
window.event.returnValue = false;
}
}
この例では数字と「-」と「,」以外は入力出来なくなります。
keyCodeで対応するコードを指定してやればいくらでも制御可能です。

例2:
JScriptファイルを作成しないで直接JavaScriptを記入する。
Me.TextBox.Attributes("onkeyPress") = "JavaScript:if (((event.keyCode < 48) || (event.keyCode > 57)) && (event.keyCode != 45) && (event.keyCode!=46)){window.event.returnValue = false;}"

例3:
カスタムコントロールを作成する。
上記例2を参考に数値のみ入力可能なカスタムコントロールを作成する。

以上
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2004-12-28 10:31
おそらくJitta様が原則できないとおっしゃっているのは
キー入力以外の貼り付けなどに対応できないという意味ではないでしょうか?
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2004-12-28 12:20
Javascriptが常に動くとは限らないとか。
いずれにせよ、サーバ側のチェックは必須ですね。
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2004-12-28 13:22
NAL-6295です。

既に他の方の発言にあるように稼働環境に制限ありですが・・・

IMEモードをinactiveに設定した上で、

コード:

/// <param name="AllowChar">入力不可能な文字リストです。</param>
/// <returns>入力不可能な文字を制限するスクリプト</returns>
static public string CreateStatementDenyInputChar(string AllowChar)
{
StringBuilder Statement = new StringBuilder("");
Statement.Append("c = String.fromCharCode(event.keyCode);\n");
Statement.Append("if (!\"");
Statement.Append(AllowChar);
Statement.Append("\".indexOf(c,0) < 0) return(false);");
return(Statement.ToString());
}



このメソッドで入力制限をかけるJavaScriptを生成することが出来ますので、TextBoxのonKeyPressに割り当ててください。
また同時に、

コード:

if(event.ctrlKey && (event.keyCode==86 || event.keyCode == 88 || event.keyCode == 67))return false;



といったJavaScriptをonKeyDownに設定することで貼り付け等も抑制する事が出来ます。

基本的には、これらをプロパティで設定できるようにしたカスタムコントロールを作成すると楽でしょう。

_________________
拘らない事に拘る。

[ メッセージ編集済み 編集者: NAL-6295 編集日時 2004-12-28 13:24 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-12-28 21:07
引用:

ゆうさんの書き込み(2004-12-28 10:24)より:

JavaScriptを使用すれば可能です。


その例だと、キーボードから入力したときは大丈夫ですが、コピーペーストしたときにはダメですよね?または、コピーペースト自体を禁止してしまいますよね。あと、キーコードで判定すると、全角文字もイケてしまうと思いますが、どうでしょう?OnChangedで判定すれば、内容をチェックできるのですが、Webではこのイベントは、フォーカスが外れないと発生しません。Windowsアプリケーションのように、入力そのものを制限することは出来ません。
 『原則出来ない』としたのは、この辺です。IE限定にしてしまうと、IMEの制御も出来るので、かなり思い通りに出来るでしょう。しかし、"Windowsアプリケーションと同じように"は出来ません。

 また、サーバでの入力チェックは、不特定多数の人が使うのなら、必ず必要です。JavaScriptがONになっていることを強制しても、ページを保存して値を直接指定し、ポストすることも出来るのですから。



と書いておいて、上げるときにはすでにレスがついている。。。
_________________
ごろう
ベテラン
会議室デビュー日: 2006/12/06
投稿数: 50
お住まい・勤務地: 神奈川県横浜市 横浜駅の海方面
投稿日時: 2007-10-18 11:58
VBレスキュー(花ちゃん)のサイトに、
JavaScriptではなくコードで記述するサンプルがありますが、
これでもよろしいのでしょうか?

サンプルコード
http://www.bcap.co.jp/hanafusa/dotnet/txtbox05.htm



[ メッセージ編集済み 編集者: ごろう 編集日時 2007-10-18 12:00 ]

スキルアップ/キャリアアップ(JOB@IT)