当前位置:  开发笔记 > 编程语言 > 正文

RegularExpressionValidator是否使用除Regex之外的其他风味?

如何解决《RegularExpressionValidator是否使用除Regex之外的其他风味?》经验,为你挑选了2个好方法。

如果输入的字符串看起来像车辆识别号码(VIN),我想做初步检查.我知道它由17个字母和数字组成,但是在VIN中不允许使用字母I,O和Q,所以我使用这个正则表达式:

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

现在,如果我使用RegularExpressionValidator检查类似1G1FP22PXS2100001的字符串,它会失败,但是带有此OnServerValidate事件处理程序的CustomValidator

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

效果很好.

实验显示了RegularExpressionValidator不支持字符类减法,但Regex类支持.

现在我感兴趣为什么这两个.NET类使用不同的正则表达式?它是否记录在案?



1> VonC..:

不是一个直接的答案,只是一个明显的评论:

如果由于某种原因不支持Character类减法,您始终可以使用它作为变通方法:

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

记录我在这个问题的评论中的内容:

文章如何:验证ASP.NET服务器控件的模式,确实提到javascript客户端正则表达式验证器不知道"字符类减法"

正如在RegularExpressionValidator Class .Net文档中提到的那样:

除非浏览器不支持客户端验证或明确禁用客户端验证(通过将EnableClientScript属性设置为false),否则将执行服务器端和客户端验证.

正则表达式验证实现在客户端上与在服务器上略有不同.在客户端上,使用JScript正则表达式语法.
在服务器上,使用System.Text.RegularExpressions..::.Regex语法.
JScript的正则表达式语法的一个子集System.Text.RegularExpressions..::.Regex语法.
因此,建议使用JScript正则表达式语法,以便在客户端和服务器上产生相同的结果.

在RegularExpressionValidator的博客条目中提到了这种副作用(服务器端和客户端之间的不同正则表达式)的另一个例子.



2> csgero..:

RegularExpressionValidator还支持使用JavaScript的客户端验证,其中使用了JavaScript Regex引擎.您看到的差异是JavaScript和.NET正则表达式实现之间的区别.您可以禁用客户端验证,从而强制验证器使用.NET正则表达式引擎,但需要额外的回复.

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有