正则表达式长度验证:忽略前导和尾随空格

Esp*_* S. 3 .net c# regex asp.net

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

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

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

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

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

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

要清除,我希望人们能够输入:

Hi,
My name is ben
Run Code Online (Sandbox Code Playgroud)

我不希望他们能够输入:

Hi                  .
Run Code Online (Sandbox Code Playgroud)

要么

A              B
Run Code Online (Sandbox Code Playgroud)

(很多换行符或空格)

正则表达式可能不是最佳选择?如果是这样,我如何在正则表达式求值之前搜索和替换字符串(同时仍然使用旧表达式在验证器中捕获它)?

Mar*_*lak 5

使用下面的正则表达式:

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

它在任意数量的空白字符之后(或之前)将单个字符或单个字符视为单个实体.