3

投稿ごとにユーザーを 5 から 1024 文字に制限しようとしています。

現在、これにはasp.net RegularExpressionValidatorを使用しています。

式を次のように設定すると、これはちょっとうまくいきます。

body.ValidationExpression = string.Format("^[\\s\\S]{{{0},{1}}}$",
        MinimumBodyLength,
        MaximumBodyLength);

ただし、これは NewLines と先頭/末尾/複数のスペースを考慮していません。したがって、ユーザーは次のようなものを入力できます: Ok (3 つのスペース)。(ドット) であり、3 つのスペースが文字としてカウントされるため、引き続き検証されます。同じことが改行にも当てはまります。を 1 つ入力することもできます。(ドット) の後に 5 つのスペース/改行が続きます。

Web で見つけた複数の正規表現のバリエーションを試しましたが、私のニーズにぴったり合うものはないようです。最低 5 文字、最大 3000 文字を入力してもらいたいのですが、使用する newLines とスペースの数はあまり気にしません。

明確にするために、私は人々がタイプできるようにしたい:

Hi,
My name is ben

次のように入力できるようにしたくありません。

Hi                  .

また

A              B

(多くの改行またはスペース)

正規表現が適していない可能性はありますか? もしそうなら、正規表現が評価される前に文字列を検索して置換するにはどうすればよいですか (バリデーターで古い式でキャッチします)?

4

2 に答える 2

5

以下の正規表現を使用します。

body.ValidationExpression = string.Format("^((\S)|((\s+|\n+|(\r\n)+)+\S)|(\S(\s+|\n+|(\r\n)+))+){{{0},{1}}}$",
    MinimumBodyLength,
    MaximumBodyLength);

任意の数の空白文字の後 (または前) の単一の文字または単一の文字を単一のエンティティとして扱います。

于 2013-03-05T13:44:42.177 に答える
0

私があなたの問題を理解したなら、あなたは単語の文字だけを数えたいでしょう。それがポイントである場合は、これを試すことができます:

body.ValidationExpression = string.Format("^\w{{{0},{1}}}$",
MinimumBodyLength,
MaximumBodyLength);
于 2013-03-05T13:46:10.680 に答える