RegularExpressionValidator不仅仅是AlphaNumerics

时间:2010-11-29 20:56:30

标签: c# asp.net regex validation

我有一个RegularExpressionValidator:

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

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

有人告诉我,我现在需要它另外用于下划线,&符号'&',逗号,括号和fullstop。

我试过了:

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

但这使它几乎可以接受任何事情。

有人可以告诉我哪里出错了吗?我对Regex比较陌生。

4 个答案:

答案 0 :(得分:2)

点表示“任何东西”(除了您的设置,行返回)。如果要匹配点字符,则必须使用反斜杠转义它:

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

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

答案 1 :(得分:1)

使用时要小心。在正则表达式中,因为它是一个特殊字符,它匹配任何字符。您可能希望像以下一样转义它:\.或将其放在像[.]这样的字符类中。照顾其他任何特殊字符。

您可以找到关于点here的许多有趣信息,请确保检查该网站中的其他链接,它们会让您深入了解正则表达式的工作方式!

希望这有帮助。

答案 2 :(得分:0)

试试这个。将开头[放入并将-移至最后。

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

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

答案 3 :(得分:0)

请查看herehere,了解如何编写包含字母数字,空格(可能只是水平而非垂直),破折号和撇号的内容,以便它能够正确处理Unicode数据。< / p>

代码存在于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}]]))";

太棒了,但确实如此。