欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【浅谈在ASP.NET中数据有效性校验的方法】,下面是详细的分享!
浅谈在ASP.NET中数据有效性校验的方法
作为一名程序员,一定要对自己编写的程序的健壮性负责,因此数据的校验无论在商业逻辑还是系统实现都是必不可少的部分。
我这里总结了一种自认为比较不错的asp.net(C#)的数据校验方法,如大家探讨。
主要用Regex的IsMatch方法,在BusinessRule层进行校验数据的有效性,并将校验的方法作为BusinessRule层基类的一部分。
在WebUI层现实提示信息。
usingSystem;
usingSystem.Data;
usingSystem.Text.RegularExpressions;
namespaceEducation.BusinessRules
{
///<summary>
///商业规则层的基类
///</summary>
publicclassBizObject
{
publicconstStringREGEXP_IS_VALID_EMAIL=@"^\w+((-\w+)|(\.\w+))*\@\w+((\.|-)\w+)*\.\w+$";//电子邮件校验常量
publicconstStringREGEXP_IS_VALID_URL=@"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?";//网址校验常量
publicconstStringREGEXP_IS_VALID_ZIP=@"\d{6}";//邮编校验常量
publicconstStringREGEXP_IS_VALID_SSN=@"\d{18}|\d{15}";//身份证校验常量
publicconstStringREGEXP_IS_VALID_INT=@"^\d{1,}$";//整数校验常量
publicconstStringREGEXP_IS_VALID_DEMICAL=@"^-?(0|\d+)(\.\d+)?$";//数值校验常量"
//日期校验常量
publicconstStringREGEXP_IS_VALID_DATE=@"^(?:(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))(\/|-|\.)(?:0?2\1(?:29))$)|(?:(?:1[6-9]|[2-9]\d)?\d{2})(\/|-|\.)(?:(?:(?:0?[13578]|1[02])\2(?:31))|(?:(?:0?[1,3-9]|1[0-2])\2(29|30))|(?:(?:0?[1-9])|(?:1[0-2]))\2(?:0?[1-9]|1\d|2[0-8]))$";
publicBizObject(){}
#region校验字段是否为空或字段长度超长方法
publicstringGetFieldTooLongError(stringErrorField,intmaxlen)
{
returnErrorField+"信息超长,请删减至"+maxlen.ToString()+"个字符!";
}
publicstringGetFieldNullError(stringErrorField)
{
returnErrorField+"是必填项,不允许为空!";
}
publicboolIsValidField(DataRowRow,StringfieldName,intmaxLen,stringErrorField,boolAllowNull)
{
inti=(short)(Row[fieldName].ToString().Trim().Length);
if(i<1&&(!AllowNull))
{
Row.SetColumnError(fieldName,GetFieldNullError(ErrorField));
returnfalse;
}
elseif(i>maxLen)
{
Row.SetColumnError(fieldName,GetFieldTooLongError(ErrorField,maxLen));
returnfalse;
}
returntrue;
}
#endregion
#region校验电子邮件类型字段格式方法
publicstringGetEmailFieldError(stringErrorField)
{
returnErrorField+"格式不正确(a@b.c)!";
}
publicboolIsValidEmail(DataRowRow,StringfieldName,intmaxLen,stringErrorField,boolAllowNull)
{
inti=(short)(Row[fieldName].ToString().Trim().Length);
boolisValid=IsValidField(Row,fieldName,maxLen,ErrorField,AllowNull);
if(isValid)
{
isValid=(newRegex(REGEXP_IS_VALID_EMAIL)).IsMatch(Row[fieldName].ToString());
if((!isValid)&&(i>0))
{
Row.SetColumnError(fieldName,GetEmailFieldError(ErrorField));
returnfalse;
}
}
returntrue;
}
#endregion
#region校验邮编类型字段格式方法
publicstringGetZipFieldError(stringErrorField)
{
returnErrorField+"格式不正确(157032)!";
}
publicboolIsValidZip(DataRowRow,StringfieldName,intmaxLen,stringErrorField,boolAllowNull)
{
inti=(short)(Row[fieldName].ToString().Trim().Length);
boolisValid=IsValidField(Row,fieldName,maxLen,ErrorField,AllowNull);
if(isValid)
{
isValid=(newRegex(REGEXP_IS_VALID_ZIP)).IsMatch(Row[fieldName].ToString());
if((!isValid)&&(i>0))
{
Row.SetColumnError(fieldName,GetZipFieldError(ErrorField));
returnfalse;
}
}
returntrue;
}
#endregion
#region校验身份证类型字段格式方法
publicstringGetSSNFieldError(stringErrorField)
{
returnErrorField+"格式不正确(长度为15或18位)!";
}
publicboolIsValidSSN(DataRowRow,StringfieldName,intmaxLen,stringErrorField,boolAllowNull)
{
inti=(short)(Row[fieldName].ToString().Trim().Length);
boolisValid=IsValidField(Row,fieldName,maxLen,ErrorField,AllowNull);
if(isValid)
{
isValid=(newRegex(REGEXP_IS_VALID_SSN)).IsMatch(Row[fieldName].ToString());
if((!isValid)&&(i>0))
{
Row.SetColumnError(fieldName,GetSSNFieldError(ErrorField));
returnfalse;
}
}
returntrue;
}
#endregion
#region校验网址类型字段格式方法
publicstringGetUrlFieldError(stringErrorField)
{
returnErrorField+"格式不正确(http://www.abc.com)!";
}
publicboolIsValidUrl(DataRowRow,StringfieldName,intmaxLen,stringErrorField,boolAllowNull)
{
inti=(short)(Row[fieldName].ToString().Trim().Length);
boolisValid=IsValidField(Row,fieldName,maxLen,ErrorField,AllowNull);
if(isValid)
{
isValid=(newRegex(REGEXP_IS_VALID_URL)).IsMatch(Row[fieldName].ToString());
if((!isValid)&&(i>0))
{
Row.SetColumnError(fieldName,GetUrlFieldError(ErrorField));
returnfalse;
}
}
returntrue;
}
#endregion
#region校验日期类型字段格式方法
publicstringGetDateFieldError(stringErrorField)
{
returnErrorField+"日期格式不正确!";
}
publicboolIsValidDate(DataRowRow,StringfieldName,intmaxLen,stringErrorField,boolAllowNull)
{
inti=(short)(Row[fieldName].ToString().Trim().Length);
boolisValid=IsValidField(Row,fieldName,maxLen,ErrorField,AllowNull);
if(isValid)
{
isValid=(newRegex(REGEXP_IS_VALID_DATE)).IsMatch(Row[fieldName].ToString());
if((!isValid)&&(i>0))
{
Row.SetColumnError(fieldName,GetDateFieldError(ErrorField));
returnfalse;
}
}
returntrue;
}
#endregion
#region校验数值类型字段格式方法
//这也是个判断数值的办法
privateboolIsNumeric(stringValue)
{
try
{
inti=int.Parse(Value);
returntrue;
}
catch
{returnfalse;}
}
publicstringGetFieldNumberError(stringErrorField)
{
returnErrorField+"必须是数字(例如:90)!";
}
publicboolIsValidNumber(DataRowRow,StringfieldName,stringErrorField,boolAllowNull)
{
inti=(short)(Row[fieldName].ToString().Trim().Length);
boolisValid=(newRegex(REGEXP_IS_VALID_DEMICAL)).IsMatch(Row[fieldName].ToString());
if(i<1&&(!AllowNull))
{
Row.SetColumnError(fieldName,GetFieldNullError(ErrorField));
returnfalse;
}
elseif((!isValid)&&(i>0))
{
Row.SetColumnError(fieldName,GetFieldNumberError(ErrorField));
returnfalse;
}
returntrue;
}
#endregion
}
}
//在继承了基类的BusinessRule中使用校验的方法
///<summary>
///使用上面的方法对数据进行有效性校验
///</summary>
///<paramname="Row">数据行</param>
///<returns>通过--true不通过--false</returns>
publicboolValidate(DataRowRow)
{
boolisValid;
Row.ClearErrors();
isValid=IsValidField(Row,"name",20,"姓名",false);
isValid&=IsValidZip(Row,"zip",6,"邮编",true);
isValid&=IsValidNumber(Row,"age","年龄",false);
isValid&=IsValidEmail(Row,"email",50,"电子邮件",true);
returnisValid;
}
//在WebUI中显示错误提示信息
///<summary>
///显示提交数据返回的错误信息
///</summary>
privatevoidDisplayErrors()
{
StringfieldErrors="";
StringtmpfieldErrors="";
DataRowRow=ds.Tables[0].Rows[0];
foreach(DataColumnColumninds.Tables[0].Columns)
{
tmpfieldErrors=Row.GetColumnError(Column.ColumnName.ToString());
if(tmpfieldErrors!="")
{
fieldErrors+="<li>"+tmpfieldErrors+"<br>";
}
}
//显示错误信息
this.lblError.Text=fieldErrors;
}
以上所分享的是关于浅谈在ASP.NET中数据有效性校验的方法,下面是编辑为你推荐的有价值的用户互动:
相关问题:怎样在excel中利用有效性序列建立二级下拉菜单
答: 上图所示有效性异表二级下拉列表设置说明: 1、设置一级下拉列表: 上图中黄底红字部分选择,“数据/有效性/设置/允许/序... >>详细
相关问题:用excel数据有效性校验银行卡是否正确,在当前单元...
答:Excel规定: 在数据验证条件中不能使用引用操作符(如朕合,交叉引用和范围〕或数组常量 。 所以你这个公式是无法应用到数据有效性中的。 没有办法。。 >>详细
相关问题:EXCEL中如何校验身份证号码的有效性?
答:可用“数据有效性”进行简单校验。 方法: 选定单元格区域,点菜单“数据”——“有效性”,点“设置”标签,在“允许”中选择“自定义”,在后面“公式”中输入=and(len(a1)=18,countif(s:s,left(a1,6)))。点“出错警告”标签,点中“出错警告”,在“样式”中寻停止”... >>详细
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
