Effective C# 原则39:使用.Net验证
2009-02-19 08:15:40 来源:WEB开发网表5.1 常用的正则表达式
构造含意
[a-z]匹配单个小写字符。括号内的字符集中的任何字符与单个字符匹配。
d任何数字。
^,$^表示串的开始, $表示结束。
w匹配任何单词.这是[A-Za-z0-9]简写。
(?NamedGroupd{4,16})显示两个不同的常用元素,?NamedGroup 定义了一个特殊的变量来引用匹配。{4,16}匹配前面的构造至少4次最多16次。这一模式匹配一个至少包含4个但不超过16个数字的字符串。如果匹配存在,那么结果会存储在NamedGroup中以便后面使用。
(a|b|c)匹配a或b或c。 用坚线分开的是选择操作:输入的可是其中的任何一个。
(?(NamedGroup)a|b) 可选的。这与C#里的三元操作等效,也就是说,如果NamedGroup 存在,匹配a,否则匹配b.
(译注,关于正则表达式这里只是简单的说明了一下。觉得作者在这里写正则表达式很是不伦不类,即不全也不精。)
使用这些及正则表达式的构造,你可以发现你可以验证用户提交给你的任何内容。如果正则表达式还不够,你还可以通过从CustomValidator 派生一个新在类添加你自己的验证。这是一个不小的工作,而且我尽可能的避免它。当你用C#写了一服务器函数来验证数据后,还要用ECMAscript写一个客户端的验证函数。我讨厌同样的事做两遍,而且我也尽可能的避免用ECMAscript写任何内容,所以,我喜欢粘贴正则表达式式。
例如,这有一个正则表达式,用于验证US的电话号码。它接受区号用括号括起来的,或者没有括号的,然后就是区号和号码之间的空格,交换局号(exchange ),以及号码。区号和交换局号之间的横线也是可选的:
(((s*d{3}s*))|(d{3}))-?s*d{3}s*-s*d{4}
通过查验每一个组的表达式,这样的逻辑是很清楚的:
更多精彩
赞助商链接