【问题标题】:Multiline textbox new line character regularexpressionvalidator issues多行文本框换行符正则表达式验证器问题
【发布时间】:2013-05-29 04:15:47
【问题描述】:

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

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

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

【问题讨论】:

  • 你遇到什么类型的错误
  • 那行不通。当你去一个新行时它会停止。

标签: asp.net regex webforms


【解决方案1】:

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

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

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

这应该就是你所需要的:

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

【讨论】:

  • 我认为我们在 asp.net 更改正则表达式时遇到了问题。我把上面的和asp.net的代码更改为([a-z]|[A-Z]|[0-9]|[ ]|[-]|[_]|[.]|[,])*
【解决方案2】:

你可以把它简化很多。

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

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

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

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

【讨论】:

  • 你能试试这个吗? ^[\w\s/\n/\r.,-]*$
  • 我对 asp.net 的了解还不够,不知道为什么会失败。 \s 应该匹配大多数正则表达式中的换行符作为空格字符。 \r\n 应该专门匹配换行符。这似乎与正则表达式无关,而是您的验证器设置。
猜你喜欢
  • 2016-08-24
  • 2011-10-29
  • 1970-01-01
  • 1970-01-01
  • 2011-01-20
  • 1970-01-01
  • 2011-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多