自定义Flex Validator
作者:Flying 日期:2010-03-03
如果创建自定义Validator类,一般要继承Validator基类,覆盖基类doValidation() 方法。下面实例我们就来自定义一个简单的中国大陆身份证号码的Validator类。
大家都知道,新身份证号码是由18位数字组成的,其中前六位表示省市县代码,第6~13位表示出生日期。而旧身份证号码是由15位数字组成的,其中前六位表示省市县代码,第6~11位表示出生日期。下面我们来看代码实现。
results = super.doValidation(value);
results数组由ValidationResult对象组成,通过构造ValidationResult对象来定义验证错误代码和验证错误消息等。这一句调用了父类的doValidation() 方法,实现使验证程序生成必填字段的功能。
for (var i:int = 0; i < len; i++)
{
var c:String = val.charAt(i);
if (isNaN(parseInt(c)))
{
results.push(new ValidationResult(
true, null, "invalidChar", invalidCharError));
return results;
}
}
这个代码块用来验证身份证号码每一位是否为整数。
if (len == 18)
{
dateStr = val.substr(6, 8);
if(!DateField.stringToDate(dateStr, "YYYYMMDD"))
{
results.push(new ValidationResult(
true, null, "invalidDate",
invalidDateError));
return results;
}
}
上述代码块用来验证18位身份证号码的出生日期。
else if(len == 15)
{
dateStr = val.substr(6, 6);
if(!DateField.stringToDate(dateStr, "YYMMDD"))
{
results.push(new ValidationResult(
true, null, "invalidDate",
invalidDateError));
return results;
}
}
此代码块用来验证15位身份证号码的出生日期。
else
{
results.push(new ValidationResult(
true, null, "digit",
digitError));
return results;
}
该代码块用来验证添加身份证号码位数不正确时的错误提示信息。
也许有人要问,为什么不直接继承NumberValidator呢?NumberValidator包含了对小数、负数、千分位等的处理,用起来太过了。也许有人要问,为什么不直接了使用RegExpValidator呢?原因在于RegExpValidator无法验证出生日期。
本实例中的IDCardValidator类的很简单,我们可以侦听其它输入表单(如出生地和出生日期)来改进对身份证号码的验证。
评论: 0 | 引用: 0 | 查看次数: -
发表评论


上一篇:
下一篇:
文章来自:
Tags:
相关日志: