- PR -

入力文字数検証の改行対策

1
投稿者投稿内容
りか
会議室デビュー日: 2007/07/23
投稿数: 5
投稿日時: 2007-08-02 13:57
こんにちは。
VWD2005 Express版でプログラムを作っています。
RegularExpressionValidatorでMultiLineに設定したTextBoxの入力文字数に制限をかけたいのですが、ValidatorExpression に .{1,100} (100文字制限のつもり)などとしただけでは、改行を含む文字列だと100文字以内でも引っかかってしまいます。
改行を無視させるにはどうしたらよいのでしょうか。 宜しくお願いします。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-08-02 14:49
正規表現て基本的に行単位で行う物ですよね。
TextBox1.Length で調べるのはダメですか?

改行は文字数に入れる必要がありますか?
入れる必要がないなら Replase してカウントするという手もありますね。
_________________
かるあ のメモスニペット
りか
会議室デビュー日: 2007/07/23
投稿数: 5
投稿日時: 2007-08-02 17:06
かるあさん、お返事ありがとうございます。
正規表現は行単位のものなのですか...
登録実行時にTextBox.lengthで確認して、文字超過時に赤文字Labelで注意表示してみます。皆さんもそうしてるのでしょうか。
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2007-08-02 17:44
質問を読むと、改行を無視して 100 文字制限をしたいという風に読み取
れますね。

10 文字制限とした場合、改行を CR/LF の2文字として計算すると

あいうえお[改行]
かきくけこ
→OK

あいうえお[改行]
かきくけこさ
→NG

としたいということですよね。

かるあさん案を採用するとして、CustomValidator クラスを使って
JavaScript とサーバー側の両方でチェックする必要があるでしょうね。
JavaScript でいうと、こんな感じで改行文字を空文字列に変換して変換
した結果の文字長が 100 を超えているかどうか調べます。

コード:

    VALUE = VALUE.replace(/\r\n/g, "");


VALUE はチェックする文字列。
JavaScript の replace は通常最初の 1 個しか置換してくれませんが、
/…/g のようにするとすべて置換してくれます。
サーバー側であれば String.Replace メソッド一発で置換可能です。
# これ書くのに調べて初めて知ったわ…

いずれにせよ、設定をしたらチョチョイとできあがるようなものではないので、
いろいろと調べて理解してから使うようにしてください。
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
りか
会議室デビュー日: 2007/07/23
投稿数: 5
投稿日時: 2007-08-02 19:52
ぽぴ王子さん、お返事ありがとうございます。
わざわざ調べて頂いたみたいで、ありがとうございます。

JavaScript ですが...
私にはまだちょっとハードルが高いみたいです。
教えて頂いたことをヒントに、少し勉強してからチャレンジしてみますね。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-08-02 19:56
なぜ、改行を含まずに100文字なんだろう?
データベースにしまうのだったら、改行も含めないとダメなんじゃ?
入力時に改行は許可するが、内部では削除する?でも、入力するひとは、改行使って表示桁数をあわせようとするんじゃないかな?

もう一度、仕様と、ユーザーがどう使おうとするかを突き合わせてみたほうがいいと思います。



と、MacやUNIXからも使われる可能性があるなら、改行コードを調査しておくことを勧めます。
hei
ベテラン
会議室デビュー日: 2006/09/07
投稿数: 78
投稿日時: 2007-08-17 00:22
質問の意味を勘違いしていたので削除します。
すみません。


[ メッセージ編集済み 編集者: hei 編集日時 2007-08-17 01:10 ]
れい
ぬし
会議室デビュー日: 2005/11/01
投稿数: 346
投稿日時: 2007-08-17 09:47
引用:

かるあさんの書き込み (2007-08-02 14:49) より:
正規表現て基本的に行単位で行う物ですよね。



確かにデフォルトでは行単位ですが、
別に行をまたいでいても使えますよ。

(?s).{1,100}

これではだめですか?

[追記]
ちょっと反省。
いろいろ省略しすぎで意味不明なので追記。

改行を全て数に入れたいのであれば
(?s).{1,100}
こうする。
ただし、改行コードがCR+LFなら2文字、CRやLFなら1文字として数えるので注意。

改行を文字に数えたくないなら、
ぽぴ王子さん、かるあさんのReplaceを使った方法がいい。
正規表現でもできなくないが、遅いし長くなるのでお勧めしない。
この場合、いろいろなプラットフォームを考えるなら
改行コードを削除する際にCRとLF両方削除しないといけないので
Javascriptなら
VALUE = VALUE.replace(/[\r\n]/g, "");
.Netなら
VALUE = VALUE.Replace(ControlChars.CR,"").Replace(ControlChars.LF,"");
こんな感じかな?
動作検証はしてないけど。

[ メッセージ編集済み 編集者: れい 編集日時 2007-08-17 10:12 ]
1

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