【问题标题】:RegularExpressionValidator for more than just AlphaNumerics不仅仅是 AlphaNumerics 的 RegularExpressionValidator
【发布时间】:2010-11-29 20:56:29
【问题描述】:

我有一个正则表达式验证器:

ValidationExpression="^(a-zA-Z0-9 '-]+$"

所以这适用于字母数字、空格、撇号和连字符。

有人告诉我,我现在还需要它来处理下划线、和号“&”、逗号、括号和句号。

我试过了:

ValidationExpression="^(a-zA-Z0-9 '-_&,().]+$"

但这使它几乎可以接受任何东西。

谁能告诉我哪里出错了?我对正则表达式比较陌生。

【问题讨论】:

  • 为什么它以^(而不是^[开头?
  • 寻找一个不错的正则表达式教程。用 \ 转义点或括号等正则表达式元素只是理解的开始,年轻的学徒;)

标签: c# asp.net regex validation


【解决方案1】:

点表示“任何东西”(根据您的设置,换行除外)。如果要匹配点字符,则必须使用反斜杠对其进行转义:

ValidationExpression="^(a-zA-Z0-9 '-_&,()\.]+$"

您可能还需要转义括号和方括号,因为它们也是元字符。

【讨论】:

    【解决方案2】:

    使用 .在正则表达式中,因为它是一个特殊字符,它匹配任何字符。您可能想像这样转义它:\. 或将它放在像 [.] 这样的字符类中。还要注意任何其他特殊字符。

    您可以找到很多关于点 here 的有趣信息,请务必查看该站点中的其余链接,它们会让您深入了解正则表达式的工作原理!

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      试试这个。将开头的[ 放入并将- 移到末尾。

      ^[a-zA-Z0-9 '_&,().-]+$

      顺便说一句:. 在字符类中没有具体的引用,除了代码本身的语言正则表达式分隔符之外,大多数情况下也没有。

      【讨论】:

        【解决方案4】:

        请查看 herehere,了解如何编写表示字母数字、空白(可能只是水平而不是垂直)、破折号和撇号的内容,以便它们在 Unicode 数据上正常工作。

        Java 中有代码,但我很确定同样的规则和限制也适用于 C♯。简短的故事是你必须用 Java 写这个:

        dashes                  = "[\\u002D\\u058A\\u05BE\\u1400\\u1806\\u2010\\u2011\\u2012\\u2013\\u2014\\u2015\\u2053\\u207B\\u208B\\u2212\\u2E17\\u2E1A\\u301C\\u3030\\u30A0\\uFE31\\uFE32\\uFE58\\uFE63\\uFF0D]";
        horizontal_whitespaces  = "[\\u0009\\u0020\\u00A0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000]";
        vertical_whitespace     = "[\\u000A\\u000B\\u000C\\u000D\\u0085\\u2028\\u2029]";
        whitespace              = "[\\u000A\\u000B\\u000C\\u000D\\u0020\\u0085\\u00A0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]";
        identifier_chars        = "[\\pL\\pM\\p{Nd}\\p{Nl}\\p{Pc}[\\p{InEnclosedAlphanumerics}&&\\p{So}]]";
        apostrophic_chars       = "[\\u0027\\u02BC\\u2019\\uFF07]";
        quotation_mark_chars    = "[\\u0022\\u0027\\u00AB\\u00BB\\u2018\\u2019\\u201A\\u201B\\u201C\\u201D\\u201E\\u201F\\u2039\\u203A\\u300C\\u300D\\u300E\\u300F\\u301D\\u301E\\u301F\\uFE41\\uFE42\\uFE43\\uFE44\\uFF02\\uFF07\\uFF62\\uFF63]";
        leading_punctuation     = "[\\p{Ps}\\p{Pi}]";
        closing_punctuation     = "[\\p{Pe}\\p{Pf}]";
        boundary                = "(?:(?<=[\\pL\\pM\\p{Nd}\\p{Nl}\\p{Pc}[\\p{InEnclosedAlphanumerics}&&\\p{So}]])(?![\\pL\\pM\\p{Nd}\\p{Nl}\\p{Pc}[\\p{InEnclosedAlphanumerics}&&\\p{So}]])|(?<![\\pL\\pM\\p{Nd}\\p{Nl}\\p{Pc}[\\p{InEnclosedAlphanumerics}&&\\p{So}]])(?=[\\pL\\pM\\p{Nd}\\p{Nl}\\p{Pc}[\\p{InEnclosedAlphanumerics}&&\\p{So}]]))";
        

        惊人,但真实。

        【讨论】:

          猜你喜欢
          • 2010-10-23
          • 1970-01-01
          • 2023-03-22
          • 2013-07-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-31
          相关资源
          最近更新 更多