0

我一直在尝试验证多行文本框。当然它不起作用。

<asp:TextBox ID="t_noteTextBox" runat="server" Width="700" Text='<%# Bind("t_note") %>' TextMode="MultiLine" Rows="3" MaxLength="700"  />
<asp:RegularExpressionValidator ID="RegularExpressionValidator2" runat="server" ErrorMessage="Special Characters not allowed." ForeColor="Red" 
    ControlToValidate="t_noteTextBox" ValidationExpression="(?m)([a-z]|[A-Z]|[0-9]|[ ]|[-]|[_]|[.]|[,]|[\r]|[\n])*"   Display="Dynamic"></asp:RegularExpressionValidator>
<asp:RegularExpressionValidator runat="server" ID="valInput" ControlToValidate="t_noteTextBox"  ValidationExpression="^[\s\S]{0,740}$"
   ErrorMessage="Please enter a maximum of 740 characters"  Display="Dynamic" ForeColor="Red"></asp:RegularExpressionValidator>

只要我不添加回车,表达式就可以正常工作。一旦我去一个新的线路,我就会得到一个错误。我什至抬头发现了 ?m 多行选项。但这也不起作用。在 Expresso 中测试正则表达式效果很好。

(?m)([a-z]|[A-Z]|[0-9]|[ ]|[-]|[_]|[.]|[,]|[\r]|[\n])*

但是我一放到网站上就不行了。有任何想法吗?

4

2 回答 2

1

多行模式会改变您未使用的锚点 (^或) 的行为。$

单行模式会导致点元字符匹配包括换行符在内的所有内容,但您并没有以这种方式使用点。像大多数元字符一样,点在字符类中失去了特殊含义,因此[.]只匹配文字.

我怀疑您的问题是您允许在客户端进行验证。也就是说,您没有将EnableClientScript设置为“false”。客户端验证使用 JavaScript 而不是 .NET,并且 JavaScript 正则表达式风格不支持像(?m)and之类的内联修饰符(?s)。但这对你来说不重要,因为你没有使用点作为元字符。

这应该是您所需要的:

ValidationExpression="[a-zA-Z0-9_.,\s-]*"
于 2013-05-28T20:15:47.650 回答
0

您可以将其简化很多。

(?m)([\w., -])*

多行标志(?m)仅允许锚点^$在换行符之前和之后进行匹配,而不是通常的字符串的开始和结束,所以它在这里没有做你想要的。

如果您使用\s而不是匹配空格,它也会匹配换行符。

([\w.,\s-])*
于 2013-05-28T19:22:36.410 回答