用户在控件中输入数据,往往需要对其进行有效性难,这样可以及时检查用户提交的数据是否合法,同时可以减少服务器的负担。
A ASP.NET对验证控件的支持
ASP.NET为开发人员提供了一整套完整的服务器控件来验证用户输入的信息是否有效。其中最主要的验证控件如下:
1 、RequiredFieldValidator:验证一个必填字段,如果这个字段没填,那么,将不能提交信息。
1 、RequiredFieldValidator:验证一个必填字段,如果这个字段没填,那么,将不能提交信息。
2、CompareValidator:比较验证。比较两个字段值是否相等,如密码和确认密码两个字段是否相等;比较一个字段与一个具体的值。
3、RangeValidator:范围验证。验证一个字段是否在某个范围中,如成绩字段要是0~100范围中。
4、RegularExpressionValidator:正则表达式验证。它根据正则表达式来验证用户输入字段的格式是否合法,如电子邮件、身份证、电话号码等。
5、CustomValidator:在运行定制的客户端JavaScript或VBScript函数时,可以使用这个控件。
使用此类控件的步骤如下:
(1)
打开VS2008,新建一ASP.NET WEB应用程序,并命名为ValidatorTest。
(2)
切换页面到“设计”视图,添加一4*3的列表
(3)
将表中拖放三个Label,3个TextBox,1个Button控件,为3个Label和Button控件添加Text属性。依次为“用户名:”、“密码:”、“年龄”、“提交”
(4)
分别为3个TextBox控件设置ID属性,其中,用户名为UserNameText;密码为PwdText;年龄为AgeText
(5)
在“工具箱”中的验证栏找到RequiredFiledValidator控件,拖放至用户名文本框右边表格中
(6)
选定该控件,将ErrorMessage设置为“*用户名为必填项”,同时ControlToValidate属性设置为UserNameText
RequiredFiledValidator控件还有一个比较重要的属性display,它有三个可取值Dynamic(动态显示错误信息,其在页面上的位置只有在验证错误发生时才给出),None(验证错误信息,但不显示),Static(不管验证错误何时发生,页面都会留出供显示错误信息的)。B RegularExpressionValidator正则表达式验证控件
RegularExpressionValidator正则表达式验证控件的功能非常强大,可以自己容易构造验证方式,我们先来看看标准代码:
<ASP:RegularExpressionValidator id="Validator_ID" RunAt="Server"
ControlToValidate="
要验证控件名"
ValidationExpression="
正则表达式"
errorMessage="
错误信息"
display="Static"
>
现在来看看它的构造:在ValidationExpression中,不同的字符表示不同的含义:"."表示任意字符;"*"表示和其他表达式一起,表示容易组合;"[A-Z]"表示任意大写字母;"\d"表示容易一个数字;注意,在以上表达式中,引号不包括在内;
常见正则表达式主要有:
这是我曾经按照网上的资料自己做的一个验证控件的例子,看到switch,每个case中的绿字,即为可验证的类型,暗棕色的即为其正则表达式。
/*----------------------------------------------------------------
// Copyright (C) ** Project
// 版权所有。
// 文件名:RegularExpressionInput
// 文件功能描述:对种常见输入进行验证
// 创建标识:
//
// 修改标识:
// 修改描述:
----------------------------------------------------------------*/
.....
namespace XEP.UI
{
public partial class RegularExpressionInput : System.Web.UI.UserControl
{
/// <summary>
/// 验证类型枚举
/// </summary>
public enum validation
{
整数,
正整数,
负整数,
数字,
电话或手机,
正数,
负数,
浮点数,
正浮点数,
负浮点数,
浮点数,
非负浮点数,
非正浮点数,
邮件,
颜色,
url,
中文,
ACSII字符,
邮编,
手机,
IP地址,
非空,
图片,
压缩文件,
日期,
QQ号码,
国内电话,
用户名,
字母,
大写字母,
小写字母,
身份证
}
private validation val;
/// <summary>
/// 验证类型
/// </summary>
public validation Validation
{
get { return val; }
set { val = value; }
}
private string errorMsg;
/// <summary>
/// 出错提示
/// </summary>
public string ErrorMsg
{
get { return errorMsg; }
set { errorMsg = value; }
}
/// <summary>
/// 输入文本
/// </summary>
public string Text
{
get { return this.TextBox1.Text; }
set { this.TextBox1.Text = value; }
}
private System.Drawing.Color msgColor;
/// <summary>
/// 错误提示颜色
/// </summary>
public System.Drawing.Color MsgColor
{
get { return msgColor; }
set { msgColor = value; }
}
protected string color;
protected string pattern;
protected void Page_Load( object sender, EventArgs e)
{
switch (Convert.ToInt32(val))
{
case 0: //整数
pattern = "/^-?[1-9]\\d*$/";
break;
case 1: //正整数
pattern = "/^[1-9]\\d*$/";
break;
case 2: //负整数
pattern = "/^-[1-9]\\d*$/";
break;
case 3: //数字
pattern = "/^([+-]?)\\d*\\.?\\d+$/";
break;
case 4: //电话或手机
pattern = "/d*\\-?\\d+$/";
break;
case 5: //正数(正整数+ 0)
pattern = "/^[1-9]\\d*|0$/";
break;
case 6: //负数(负整数+ 0)
pattern = "/^-[1-9]\\d*|0$/";
break;
case 7: //浮点数
pattern = "/^([+-]?)\\d*\\.\\d+$/";
break;
case 8: //正浮点数
pattern = "/^[1-9]\\d*.\\d*|0.\\d*[1-9]\\d*$/";
break;
case 9: //负浮点数
pattern = "/^-([1-9]\\d*.\\d*|0.\\d*[1-9]\\d*)$/";
break;
case 10: //浮点数
pattern = "/^-?([1-9]\\d*.\\d*|0.\\d*[1-9]\\d*|0?.0+|0)$/";
break;
case 11: //非负浮点数(正浮点数+ 0)
pattern = "/^[1-9]\\d*.\\d*|0.\\d*[1-9]\\d*|0?.0+|0$/";
break;
case 12: //非正浮点数(负浮点数+ 0)
pattern = "/^(-([1-9]\\d*.\\d*|0.\\d*[1-9]\\d*))|0?.0+|0$/";
break;
case 13: //邮件
pattern = "/^\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$/";
break;
case 14: //颜色
pattern = "/^[a-fA-F0-9]{6}$/";
break;
case 15: //url(http格式的)
pattern = "/^http[s]?:\\/\\/([\\w-]+\\.)+[\\w-]+([\\w-.\\/?%&=]*)?$/";
break;
case 16: //仅中文
pattern = "/^[\\u4E00-\\u9FA5\\uF900-\\uFA2D]+$/";
break;
case 17: //仅ACSII字符
pattern = "/^[\\x00-\\xFF]+$/";
break;
case 18: //邮编
pattern = "/^\\d{6}$/";
break;
case 19: //手机(13号段和号段)
pattern = "/^(13|15)[0-9]{9}$/";
break;
case 20: //ip地址
pattern = "/^(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5]).(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5]).(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5]).(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])$/";
break;
case 21: //非空
pattern = "/^\\S+$/";
break;
case 22: //图片
pattern = "/(.*)\\.(jpg|bmp|gif|ico|pcx|jpeg|tif|png|raw|tga)$/";
break;
case 23: //压缩文件
pattern = "/(.*)\\.(rar|zip|7zip|tgz)$/";
break;
case 24: //日期
pattern = "/^\\d{4}(\\-|\\/|\\.)\\d{1,2}\\1\\d{1,2}$/";
break;
case 25: //QQ号码
pattern = "/^[1-9]*[1-9][0-9]*$/";
break;
case 26: //国内电话
pattern = "/(\\d{3}-|\\d{4}-)?(\\d{8}|\\d{7})/";
break;
case 27: //用来用户注册。匹配由数字、个英文字母或者下划线组成的字符串
pattern = "/^(?!\\d)[a-zA-Z0-9\\u4e00-\\u9fa5]+$/";
break;
case 28: //字母
pattern = "/^[A-Za-z]+$/";
break;
case 29: //大写字母
pattern = "/^[A-Z]+$/";
break;
case 30: //小写字母
pattern = "/^[a-z]+$/";
break;
case 31: //身份证
pattern = "/^[1-9]([0-9]{14}|[0-9]{17})$/";
break;
default:
pattern = string.Empty;
break;
}
}
}
}
// Copyright (C) ** Project
// 版权所有。
// 文件名:RegularExpressionInput
// 文件功能描述:对种常见输入进行验证
// 创建标识:
//
// 修改标识:
// 修改描述:
----------------------------------------------------------------*/
.....
namespace XEP.UI
{
public partial class RegularExpressionInput : System.Web.UI.UserControl
{
/// <summary>
/// 验证类型枚举
/// </summary>
public enum validation
{
整数,
正整数,
负整数,
数字,
电话或手机,
正数,
负数,
浮点数,
正浮点数,
负浮点数,
浮点数,
非负浮点数,
非正浮点数,
邮件,
颜色,
url,
中文,
ACSII字符,
邮编,
手机,
IP地址,
非空,
图片,
压缩文件,
日期,
QQ号码,
国内电话,
用户名,
字母,
大写字母,
小写字母,
身份证
}
private validation val;
/// <summary>
/// 验证类型
/// </summary>
public validation Validation
{
get { return val; }
set { val = value; }
}
private string errorMsg;
/// <summary>
/// 出错提示
/// </summary>
public string ErrorMsg
{
get { return errorMsg; }
set { errorMsg = value; }
}
/// <summary>
/// 输入文本
/// </summary>
public string Text
{
get { return this.TextBox1.Text; }
set { this.TextBox1.Text = value; }
}
private System.Drawing.Color msgColor;
/// <summary>
/// 错误提示颜色
/// </summary>
public System.Drawing.Color MsgColor
{
get { return msgColor; }
set { msgColor = value; }
}
protected string color;
protected string pattern;
protected void Page_Load( object sender, EventArgs e)
{
switch (Convert.ToInt32(val))
{
case 0: //整数
pattern = "/^-?[1-9]\\d*$/";
break;
case 1: //正整数
pattern = "/^[1-9]\\d*$/";
break;
case 2: //负整数
pattern = "/^-[1-9]\\d*$/";
break;
case 3: //数字
pattern = "/^([+-]?)\\d*\\.?\\d+$/";
break;
case 4: //电话或手机
pattern = "/d*\\-?\\d+$/";
break;
case 5: //正数(正整数+ 0)
pattern = "/^[1-9]\\d*|0$/";
break;
case 6: //负数(负整数+ 0)
pattern = "/^-[1-9]\\d*|0$/";
break;
case 7: //浮点数
pattern = "/^([+-]?)\\d*\\.\\d+$/";
break;
case 8: //正浮点数
pattern = "/^[1-9]\\d*.\\d*|0.\\d*[1-9]\\d*$/";
break;
case 9: //负浮点数
pattern = "/^-([1-9]\\d*.\\d*|0.\\d*[1-9]\\d*)$/";
break;
case 10: //浮点数
pattern = "/^-?([1-9]\\d*.\\d*|0.\\d*[1-9]\\d*|0?.0+|0)$/";
break;
case 11: //非负浮点数(正浮点数+ 0)
pattern = "/^[1-9]\\d*.\\d*|0.\\d*[1-9]\\d*|0?.0+|0$/";
break;
case 12: //非正浮点数(负浮点数+ 0)
pattern = "/^(-([1-9]\\d*.\\d*|0.\\d*[1-9]\\d*))|0?.0+|0$/";
break;
case 13: //邮件
pattern = "/^\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$/";
break;
case 14: //颜色
pattern = "/^[a-fA-F0-9]{6}$/";
break;
case 15: //url(http格式的)
pattern = "/^http[s]?:\\/\\/([\\w-]+\\.)+[\\w-]+([\\w-.\\/?%&=]*)?$/";
break;
case 16: //仅中文
pattern = "/^[\\u4E00-\\u9FA5\\uF900-\\uFA2D]+$/";
break;
case 17: //仅ACSII字符
pattern = "/^[\\x00-\\xFF]+$/";
break;
case 18: //邮编
pattern = "/^\\d{6}$/";
break;
case 19: //手机(13号段和号段)
pattern = "/^(13|15)[0-9]{9}$/";
break;
case 20: //ip地址
pattern = "/^(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5]).(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5]).(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5]).(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])$/";
break;
case 21: //非空
pattern = "/^\\S+$/";
break;
case 22: //图片
pattern = "/(.*)\\.(jpg|bmp|gif|ico|pcx|jpeg|tif|png|raw|tga)$/";
break;
case 23: //压缩文件
pattern = "/(.*)\\.(rar|zip|7zip|tgz)$/";
break;
case 24: //日期
pattern = "/^\\d{4}(\\-|\\/|\\.)\\d{1,2}\\1\\d{1,2}$/";
break;
case 25: //QQ号码
pattern = "/^[1-9]*[1-9][0-9]*$/";
break;
case 26: //国内电话
pattern = "/(\\d{3}-|\\d{4}-)?(\\d{8}|\\d{7})/";
break;
case 27: //用来用户注册。匹配由数字、个英文字母或者下划线组成的字符串
pattern = "/^(?!\\d)[a-zA-Z0-9\\u4e00-\\u9fa5]+$/";
break;
case 28: //字母
pattern = "/^[A-Za-z]+$/";
break;
case 29: //大写字母
pattern = "/^[A-Z]+$/";
break;
case 30: //小写字母
pattern = "/^[a-z]+$/";
break;
case 31: //身份证
pattern = "/^[1-9]([0-9]{14}|[0-9]{17})$/";
break;
default:
pattern = string.Empty;
break;
}
}
}
}
上面的程序只是为了表示验证某种类型,其正则表达式的形式,本身没有什么可运行性。在“正则表达式编辑器中”分别选择标准表达式,输入下面的验证表达式即可。
未完,因多于8万字符,分两节
本文转自 gaochaojs 51CTO博客,原文链接:http://blog.51cto.com/jncumter/184783,如需转载请自行联系原作者