我正在寻找一个正则表达式,它将匹配文本中的字符串## test ##。字符串可以被任何单词或非单词字符,白色空格或换行符包围 - 所以一切都可以是字符串的左侧和右侧,无论如何。 我需要在用于ValidationExpression的asp.net RegularExpressionValidator控件中使用它。
提前感谢您的帮助! 问候。
<asp:RegularExpressionValidator ID="RegularExpressionValidator9" runat="server" ControlToValidate="TextBox1"
Display="Dynamic" ValidationGroup="Mail" ErrorMessage="Insert !"
ValidationExpression="(\w|\s|\n)##test##(\w|\s|\n)" >*</asp:RegularExpressionValidator>
<asp:Button ID="Button1" runat="server" Text="Button"
ValidationGroup="Mail" Onclick="Button1_Click" />
答案 0 :(得分:3)
这应该这样做:
ValidationExpression="[\s\S]*##test##[\s\S]*"
我可以看到你的正则表达式有三个问题,所有这些问题都需要(\w|\s|\n)
部分:
它只匹配一个字符。你需要它来匹配零个或多个字符;添加*
量词会做到这一点。
这是不必要的冗余和无偿的低效率。 [\w\s]
匹配相同的内容:单词字符(\w
)或空白字符(\s
,已包含\n
)。每当您在使用和替换((a|b|c)
)或字符类([abc]
)之间进行选择时,字符类应该始终是您达到的第一个工具。它可能看起来就像一个微不足道的选择,但它会对性能产生巨大影响。
它遗漏了很多字符,最明显的是标点字符,如!
,+
,.
等。
如果您想知道我使用[\s\S]*
而不是.*
的原因,那是因为可以在浏览器或服务器中执行验证。在JavaScript正则表达式中,与大多数其他版本一样,.
元字符与换行符不匹配。大多数其他人也支持“单行”或“点对点全部”模式,但不支持JavaScript。
当然,你可以只强制它在服务器上运行,但是你可能习惯于在可能的情况下将你的正则表达到JavaScript级别。 : - /
答案 1 :(得分:0)
这样的东西?
.*(##test##).*