我一直在尝试验证多行文本框。当然它不起作用。
<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])*
但是,只要我把它放在网站上,它就没有。 有什么想法吗?
答案 0 :(得分:1)
多线模式会改变您未使用的锚点(^
或$
)的行为。
单线模式使点元字符匹配包括换行符在内的所有内容,但您没有使用该点。与大多数元字符一样,点在字符类中失去其特殊含义,因此[.]
只匹配文字.
。
我怀疑你的问题是你允许在客户端进行验证。也就是说,您尚未将EnableClientScript设置为“false”。客户端验证使用JavaScript而不是.NET,JavaScript正则表达式不支持(?m)
和(?s)
等内联修饰符。但这对你来说并不重要,因为你没有使用点作为元字符。
这应该是你所需要的:
ValidationExpression="[a-zA-Z0-9_.,\s-]*"
答案 1 :(得分:0)
你可以简化这一点。
(?m)([\w., -])*
多行标记(?m)
仅允许锚点^
和$
在换行符之前和之后匹配,而不是正常的字符串的开始和结束,因此它不会执行您想要的操作这里。
如果您使用\s
而不是匹配空格,它也会与换行符匹配。
([\w.,\s-])*