重返大自然

追求卓越和自由...

导航

RegularExpressionValidator浅析


看了Anders Liu (lover_P) 正则表达式-趣现象一则 于是产生了我的第一篇文章:

RegularExpressionValidator本质上是由下面javascript方法验证的

function RegularExpressionValidatorEvaluateIsValid(val) {
        
var value = ValidatorGetValue(val.controltovalidate);
        
if (ValidatorTrim(value).length == 0)
            
return true;        
        
var rx = new RegExp(val.validationexpression);
        
var matches = rx.exec(value);
        
return (matches != null && value == matches[0]);
    }

对于提到的用正则表达式 ([1-9])|([1][0-2]) 只能匹配1~9,主要是因为如value=10,11,12,  十位的1已经满足([1-9]),故matches[0]返回的都是1,从而返回 false. ([1][0-2])|([1-9])之所以可以,是因为([1][0-2])放在前面,matches[0]能正确地返回,当然改成 ^([1-9])$|^([1][0-2])$ 也是正确的.
VS2003,VS2005都是这样,暂不论MS的value == matches[0]写法,
因为好不好我们都是无法改变的,还是改变的正则表达式的写法吧
当然能自已写脚本验证最好。能不用RegularExpressionValidator就不用,
MS VS2003的RegularExpressionValidator只能在IE中起作用,还好, VS2005中已经改正了。

posted on 2006-04-22 14:22  eboy.yang  阅读(869)  评论(3)    收藏  举报