代码之家  ›  专栏  ›  技术社区  ›  Alexander Prokofyev

RegularExpressionValidator是否使用Regex以外的其他风格?

  •  5
  • Alexander Prokofyev  · 技术社区  · 16 年前

    我想做初步检查,如果输入的字符串看起来像 Vehicle Identification Number (VIN) . 我知道它由17个字母和数字组成,但VIN中不允许有字母I、O和Q,因此我使用以下正则表达式:

    ^[0-9A-Z-[IOQ]]{17}$ 
    

    Regex r = new Regex("^[0-9A-Z-[IOQ]]{17}$");
    args.IsValid = r.IsMatch(TextBox1.Text);
    

    Character Class Subtraction ,但Regex类会。

    2 回复  |  直到 16 年前
        1
  •  8
  •   Community leo1    4 年前

    如果出于某种原因不支持字符类减法,则始终可以将其用作解决方法:

    ^[0-9A-HJ-NPR-Z]{17}$
    

    要记录我对这一问题的评论:

    How to: Validate Against Patterns for ASP.NET Server Controls ,确实提到javascript客户端正则表达式验证器不知道“字符类减法”

    如文中所述 RegularExpressionValidator Class .Net documentation

    EnableClientScript 属性设置为false)。

    客户机上的正则表达式验证实现与服务器上的实现略有不同。在客户端上,使用JScript正则表达式语法。
    在服务器上, System.Text.RegularExpressions..::.Regex 使用语法。
    语法
    因此,建议 应使用JScript正则表达式语法

    另一个关于这种副作用的例子(服务器端和客户端之间不同的正则表达式风格)在中提到 RegularExpressionValidator woes

        2
  •  5
  •   csgero    16 年前

    您可以禁用客户端验证,从而强制验证器使用.NET正则表达式引擎,代价是额外的回发。