帮我生成这个正则表达式

时间:2011-08-31 16:25:09

标签: c# asp.net regex validation

我一直在尝试使用正则表达式,但我似乎无法让它工作。我正在尝试使用asp.net RegularExpressionValidator的正则表达式。我想要它做的是基本上只允许前导和尾随空格。

所以,

"hello "                 // would not work.
"hello my name is"       // would work.

但是在我的所有尝试中,无论我投入什么,它都表示输入错误。

以下是我使用的内容:

^\s[a-z]+\s$

有人可以提供一个有效的吗?

而且,当有人说正则表达式返回匹配时,这意味着什么?

编辑:

我已经尝试了线程中的所有解决方案,但它们都不适用于我。也许这是其他错误而不是正则表达式? Heres是相关代码:

                            <InsertItemTemplate>
                            <asp:TextBox CssClass="tbUpdateSummary" TextMode="MultiLine" Text='<%# Bind("updateSummary") %>'
                                ID="tbUpdateSummaryInsert" runat="server"></asp:TextBox>
                            <asp:RequiredFieldValidator ID="valUpdateSummaryInsert1" runat="server" Display="None"
                                ControlToValidate="tbUpdateSummaryInsert" ErrorMessage="Update summary must not be empty.">
                            </asp:RequiredFieldValidator>
                            <asp:RegularExpressionValidator ValidationExpression="^\s+|\s$" ID="valUpdateSummaryEdit2"
                                runat="server" Display="None" ControlToValidate="tbUpdateSummaryInsert"  ErrorMessage="Update summary must not contain leading or trailing spaces."> </asp:RegularExpressionValidator>
                            <%--Put c# code to validate length (max 200)--%>
                            <asp:CustomValidator></asp:CustomValidator>
                        </InsertItemTemplate>

^ [^ \ s]。+ [^ \ s] $&lt; =======这个实际上有效!!

3 个答案:

答案 0 :(得分:2)

鉴于RegularExpressionValidator正在寻找与良好输入匹配而不是反之亦然:

以下正则表达式将匹配空格前面或后面没有的任何内容:

^(?!\s+).+(?<!\s+)$

虽然问题评论中提到的修剪选项似乎是一种更明智的方法。

答案 1 :(得分:1)

试试这个正则表达式,它应匹配开头和结尾没有空格的所有内容

^[^\s].+[^\s]$

答案 2 :(得分:0)

正则表达式验证器是一个积极的测试。您有三种情况需要测试

  • 长度为零的输入。
  • 输入长度为1
  • 长度输入&gt; 1

由于输入控件上有一个Required验证器,因此不会出现第一种情况。以下vanilla正则表达式应该有效:

^[^\s]([.\n]*[^\s])?$

您可以将其视为有效输入包含:

  • 行首,然后是
  • 正好是1个非空格字符,后跟
  • 可选的子表达式,由
    • 零个或多个任何字符,包括LF(默认情况下,元字符.匹配任何字符 LF),然后是
    • 正好是1个非空白字符, 其次,
  • 端的行

由于您的示例中有多行编辑控件,因此在中间使用.*而不是我使用的[.\n]*将导致匹配在找到的第一个LF字符处终止。有关.Net正则表达式字符类的详细信息,请参阅http://msdn.microsoft.com/en-us/library/az24scfc.aspx#character_classes

[编辑注意]

测试显示由于某种原因,.Net不喜欢包含[]的{​​{1}}个字符类(或者它将其视为文字句点字符)。这个正则表达式有效:

.

但它允许尾随换行符。

然而,这个正则表达式更好(对于某些更好的定义)。它(A)不涉及回溯,(B)不允许拖尾换行:

^([^\s])((.|\n)*[^\s])$
  • 行首,然后是
  • 一个或多个非空白字符,后跟
  • 零次或多次重复
    • 一个或多个空白字符,后跟
    • 一个或多个非空白字符, 其次,
  • 结束的行。

祝你好运!