RegularExpressionValidator用于处理标点符号的字数

时间:2017-07-24 16:54:06

标签: asp.net regex validation webforms

我认为我有一个很好的正则表达式来限制输入到TextBox中的单词数量,但是我发现,当文本中有标点符号时它会失败。

如何修改此正则表达式(或使用另一个正则表达式),正确计算可能由多个句子组成或包含其他符号的单词?

^(?:\b\w+\b[\s\r\n]*){1,10}$

这会将单词限制为10。

1 个答案:

答案 0 :(得分:0)

我认为这是可行的唯一方式。
如果它存在,我希望看到更好的方法。

(需要原子组)

对于Unicode:

^\s*(?>[^\pL\pN]*[\pL\pN](?:[\pL\pN_-]|\pP(?=[\pL\pN\pP_-])|[?.!])*\s*){1,10}$

解释

 ^ 
 \s*     
 (?>
      [^\pL\pN]* [\pL\pN]           # Not letters/numbers, followed by letter/number
      (?:
           [\pL\pN_-]                    # Letter/number or '-'
        |  
           \pP                           # Or, punctuation if followed by punctuation/letter/number or '-'
           (?= [\pL\pN\pP_-] )
        |  
           [?.!]                         # Or, (Add) Special word ending punctuation
      )*
      \s* 
 ){1,10}
 $    

对于Ascii:

^\s*(?>[\W_]*[^\W_](?:\w|[[:punct:]_-](?=[\w[:punct:]-])|[?.!])*\s*){1,10}$

扩展

 ^   
 \s* 
 (?>
      [\W_]* [^\W_] 
      (?:
           \w 
        |  
           [[:punct:]_-] 
           (?= [\w[:punct:]-] )
        |  
           [?.!] 
      )*
      \s* 
 ){1,10}
 $