3

我试图将每个帖子的用户限制在 5 到 1024 个字符之间。

我们目前正在为此使用 asp.net RegularExpressionValidator。

如果我将表达式设置为以下内容,这有点工作:

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

但是,这并没有考虑换行和前导/尾随/多个空格。所以用户可以输入如下内容: Ok (三个空格)。(点),它仍然会被验证,因为三个空格算作字符。换行符也是如此。我们也可以键入单个 . (点)后跟 5 个空格/换行符。

我尝试了多种在网上找到的正则表达式变体,但似乎没有一个完全符合我的需求。我希望他们输入最少 5 个字符,最多 3000 个字符,但我并不关心他们使用了多少新行和空格。

为了澄清,我希望人们能够输入:

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 回答