- - PR -
入力文字数検証の改行対策
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-08-02 13:57
こんにちは。
VWD2005 Express版でプログラムを作っています。 RegularExpressionValidatorでMultiLineに設定したTextBoxの入力文字数に制限をかけたいのですが、ValidatorExpression に .{1,100} (100文字制限のつもり)などとしただけでは、改行を含む文字列だと100文字以内でも引っかかってしまいます。 改行を無視させるにはどうしたらよいのでしょうか。 宜しくお願いします。 | ||||
|
投稿日時: 2007-08-02 14:49
正規表現て基本的に行単位で行う物ですよね。
TextBox1.Length で調べるのはダメですか? 改行は文字数に入れる必要がありますか? 入れる必要がないなら Replase してカウントするという手もありますね。 _________________ かるあ のメモ と スニペット | ||||
|
投稿日時: 2007-08-02 17:06
かるあさん、お返事ありがとうございます。
正規表現は行単位のものなのですか... 登録実行時にTextBox.lengthで確認して、文字超過時に赤文字Labelで注意表示してみます。皆さんもそうしてるのでしょうか。 | ||||
|
投稿日時: 2007-08-02 17:44
質問を読むと、改行を無視して 100 文字制限をしたいという風に読み取
れますね。 10 文字制限とした場合、改行を CR/LF の2文字として計算すると あいうえお[改行] かきくけこ →OK あいうえお[改行] かきくけこさ →NG としたいということですよね。 かるあさん案を採用するとして、CustomValidator クラスを使って JavaScript とサーバー側の両方でチェックする必要があるでしょうね。 JavaScript でいうと、こんな感じで改行文字を空文字列に変換して変換 した結果の文字長が 100 を超えているかどうか調べます。
VALUE はチェックする文字列。 JavaScript の replace は通常最初の 1 個しか置換してくれませんが、 /…/g のようにするとすべて置換してくれます。 サーバー側であれば String.Replace メソッド一発で置換可能です。 # これ書くのに調べて初めて知ったわ… いずれにせよ、設定をしたらチョチョイとできあがるようなものではないので、 いろいろと調べて理解してから使うようにしてください。 _________________ ぽぴ王子@わんくま同盟 ぽぴ王子の人生プログラミング中 / ぽぴンち。 | ||||
|
投稿日時: 2007-08-02 19:52
ぽぴ王子さん、お返事ありがとうございます。
わざわざ調べて頂いたみたいで、ありがとうございます。 JavaScript ですが... 私にはまだちょっとハードルが高いみたいです。 教えて頂いたことをヒントに、少し勉強してからチャレンジしてみますね。 | ||||
|
投稿日時: 2007-08-02 19:56
なぜ、改行を含まずに100文字なんだろう?
データベースにしまうのだったら、改行も含めないとダメなんじゃ? 入力時に改行は許可するが、内部では削除する?でも、入力するひとは、改行使って表示桁数をあわせようとするんじゃないかな? もう一度、仕様と、ユーザーがどう使おうとするかを突き合わせてみたほうがいいと思います。 と、MacやUNIXからも使われる可能性があるなら、改行コードを調査しておくことを勧めます。 | ||||
|
投稿日時: 2007-08-17 00:22
質問の意味を勘違いしていたので削除します。
すみません。 [ メッセージ編集済み 編集者: hei 編集日時 2007-08-17 01:10 ] | ||||
|
投稿日時: 2007-08-17 09:47
確かにデフォルトでは行単位ですが、 別に行をまたいでいても使えますよ。 (?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