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

时间:2013-03-05 13:37:52

标签: c# asp.net .net regex

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

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

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

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

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

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

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

Hi,
My name is ben

我不希望他们能够输入:

Hi                  .

A              B

(许多换行符或空格)

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

2 个答案:

答案 0 :(得分:5)

使用以下正则表达式:

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

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

答案 1 :(得分:0)

如果我理解你的问题,你只想计算单词字符。如果这就是重点,你可以试试这个:

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