- PR -

テキストボックスの入力文字数制限について

1
投稿者投稿内容
ニッシー
常連さん
会議室デビュー日: 2008/05/21
投稿数: 28
投稿日時: 2008-07-07 19:06
いつもお世話になっております。
asp.net を利用してアプリケーションを組み始めた初心者です。
■やりたいこと
GridViewコントロール内の項目へ入力文字数制限をかけようとしています。
■やったこと。
@対象の項目をTemplateFieldへ変換
A「テンプレートの編集」から対象の項目の「EditTemplate」を選択して、テキストボックスのプロパティから「MaxLength」へ文字数を入力しています(今回は100)
■結果的に
対象項目へすべて半角文字を入力すると100文字以上入力できませんが、倍角文字が混ざると何文字でも入力できてしまいます。
結果として更新時にDBエラーとなります。

そーゆーモノでも無いと思うんですが、、、何かやり足りないことなどありましたらご指摘いただきたく、よろしくお願いいたします。
また、代替手段などありましたら教えてください。(できましたらコーディングレスで・・・JavaScript経験0デス)
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2008-07-07 19:43
単なるHTMLの話だとおもうけれどな。

その前に、input の maxlength なんてあてにならないんですからデータベース更新を行う前に値のチェックはしましょうね。
_________________
かるあ のメモスニペット
ニッシー
常連さん
会議室デビュー日: 2008/05/21
投稿数: 28
投稿日時: 2008-07-07 20:17
返信ありがとうゴザイマス。
データベースの属性がvarchar(100)で、更新を行う前に文字数のチェックを行いたくて、inputのmaxlengthを設定しました。
「あてにならない」というのは、入力文字数に制限をかける方法としてはinputのmaxlengthは一般的ではないということでしょうか?

的外れな感じでしたらスミマセン。なにぶん初心者で。
教えていただければ幸いです。
kiyokura
ベテラン
会議室デビュー日: 2007/08/08
投稿数: 69
お住まい・勤務地: 岡山
投稿日時: 2008-07-07 21:17
まず、最近のブラウザの場合、maxlengthの判定は、バイト数ではなく『文字数』でチェックする場合が多いと思います。
例えば、手元にあるIE7とFirefox 2.0では、maxlength=5とした場合、半角の『12345』と全角の『12345』の両方を許容する動きになります。
#『123456』や『123456』は許容しません。


ということで、”何文字でも入力できる”というのとは事象が異なると思われますので、まずはその点を確認してみてください。


その上で、仕様を検討し直してみてください。
(全角文字が入力されることが前提ならばDBのカラムのサイズを見直す必要があるかもしれませんし、所謂全角文字を許容しないのであればそれをはじく、等々。)


また、その上での事になりますが…。
かるあさんもおっしゃられているとおり、Webアプリケーションの場合はHTMLやJavascriptでの縛りを過信してはいけません。


かるあさんがおっしゃっている『input の maxlength なんてあてにならない』というのは、私は二つの意味があると思っています。一つは、先に挙げたように、この挙動がブラウザ依存であること。もう一つは、仮にmaxlengthが正しく想定した仕様通りに指定され機能しているとしても、それを迂回して送信される可能性があること。


maxlengthだけでなく、Javascript等を用いたクライアントサイドでのチェック/制限は、アプリケーションの整合性や正しい動作を保証するために使用するのはNGと思ってください。
あくまでも、利用者の誤入力を防いだり、際に早い段階で利用者に通知したりすることで、利用者の利便性を上げる為のモノと考えるべきと思います。


ですので、アプリケーションとしての正常な動作/整合性を保つためには、常にサーバ側でもチェックを等を行う事が必要と言う観点で、設計を行うことを強くお勧めします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-07-14 22:34
input type=text は、文字数の制限ができます。
textarea になると、文字数の制限はできません。


> データベースの属性がvarchar(100)
データベースがなにかわかりませんし、100 が「100バイト」なのか、「100文字」なのかもわかりません。
# Oracle ではない、というのはわかるけど。
1

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