正则表达式长度验证:忽略开头和结尾的空格

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

(很多换行或空格)

有可能正则表达式不是最好的选择?如果是这样,那么在正则表达式评估之前如何对字符串进行搜索和替换(同时仍然使用旧表达式在验证器中捕获)?

2个回答

5

使用以下正则表达式:

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

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


目前,它会阻止像“a(5个换行符)”这样的内容,但是它不允许“a(两个换行符)abcvd”通过验证。它必须允许用户输入换行符。 - Espen S.

0

如果我理解你的问题,你想要计算只有字母的单词。如果是这样,你可以尝试这个:

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

1
这个正则表达式不允许任何空白字符。问题不在于计算空白字符。 - Marek Musielak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接