多行文本框新行字符regularexpressionvalidator问题

时间:2013-05-28 19:16:30

标签: asp.net regex webforms

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

<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])*

但是,只要我把它放在网站上,它就没有。 有什么想法吗?

2 个答案:

答案 0 :(得分:1)

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

单线模式使点元字符匹配包括换行符在内的所有内容,但您没有使用该点。与大多数元字符一样,点在字符类中失去其特殊含义,因此[.]只匹配文字.

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

这应该是你所需要的:

ValidationExpression="[a-zA-Z0-9_.,\s-]*"

答案 1 :(得分:0)

你可以简化这一点。

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

多行标记(?m)仅允许锚点^$在换行符之前和之后匹配,而不是正常的字符串的开始和结束,因此它不会执行您想要的操作这里。

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

([\w.,\s-])*