一个能设置验证信息样式的WebTextBox基本验证复合控件
前些日子看见有人写了一个WebTextBox基本验证复合控件,感觉挺好用,唯一不足是不能方便地设置验证失败时显示的信息的样式。本人于是又对该复合控件进行了重写,对其添加了更多验证方式的选择,并能方便地对验证失败时显示的信息样式进行控制。
http://gyche.cnblogs.com/ 前些日子看见有人写了一个WebTextBox基本验证复合控件,感觉挺好用,唯一不足是不能方便地设置验证失败时显示的信息的样式。本人于是又对该复合控件进行了重写,对其添加了更多验证方式的选择,并能方便地对验证失败时显示的信息样式进行控制。以下是源代码:
1
using System;
2
using System.Collections.Generic;
3
using System.ComponentModel;
4
using System.Text;
5
using System.Web;
6
using System.Web.UI;
7
using System.Web.UI.WebControls;
8
using System.Drawing;
9
using System.Drawing.Design;
10
11
namespace GuoyongChe.WebCtrlLib
12

{
13
/**//// <summary>
14
/// 重写的TextBox控件
15
/// Author: GuoyongChe
16
/// Date: 2007-12-22
17
/// Email: Guoyong.Che@Gmail.com
18
/// QQ: 19892257
19
/// <summary>
20
///
21
枚举数据#region 枚举数据
22
/**//// <summary>
23
/// 验证数据类型
24
/// </summary>
25
public enum DataType
26
{
27
Never, //不验证
28
String, //字符串
29
Int, //整数
30
IntPostive, //大于0的整数
31
IntZeroPostive, //大于等于0的整数
32
Float, //数字
33
FloatPostive, //大于0的数字
34
FloatZeroPostive, //大于等于0的数字
35
Url,
36
Mail,
37
Date, //日期
38
ChineseChars, //汉字字符串
39
EnglishChars, //英文
40
EngNum, //英文和数字
41
EngNumUnerline, //英文、数字和下划线
42
PhoneNumber, //电话号码
43
MobileNumber, //手机号码
44
PostalCode, //邮政编码
45
QQ, //QQ号码
46
IdentityCode, //身份证号码
47
IP, //IP地址
48
Custom
49
}
50
#endregion
51
52
/**//// Attribute DefaultProperty指定组件的默认属性,ToolboxData指定当从IDE工具中的工具箱中拖动自定义控件时为它生成的默认标记
53
[DefaultProperty("AllowEmpty"), ToolboxData("<{0}:WebTextBox runat=server></{0}:WebTextBox>")]
54
55
//类MyControl派生自WebControl
56
public class WebTextBox : System.Web.UI.WebControls.TextBox
57
{
58
子控件#region 子控件
59
//private System.Web.UI.WebControls.TextBox txtDataInput = new TextBox();
60
private System.Web.UI.WebControls.RequiredFieldValidator rfvDataInput = new RequiredFieldValidator();
61
private System.Web.UI.WebControls.RegularExpressionValidator revDataInput = new RegularExpressionValidator();
62
private Panel pnlFrame = new Panel(); //承载其它控件的容器Panel控件
63
#endregion
64
65
private string error = "";
66
67
控件自定义属性#region 控件自定义属性
68
69
[Bindable(true)]
70
[Category("自定义信息区")]
71
[Browsable(true)]
72
[Description("是否允许空值")]
73
[DefaultValue("true")]
74
public bool AllowEmpty
75
{
76
get
{ return ViewState["AllowEmpty"] == null ? true : (bool)ViewState["AllowEmpty"]; }
77
set
{ ViewState["AllowEmpty"] = value; }
78
}
79
80
[Bindable(true)]
81
[Category("自定义信息区")]
82
[Browsable(true)]
83
[Description("验证数据类型,默认为不验证")]
84
[DefaultValue("IntPostive")]
85
public DataType ValidType
86
{
87
get
{ return ViewState["ValidType"] == null ? DataType.Never : (DataType)ViewState["ValidType"]; }
88
set
{ ViewState["ValidType"] = value; }
89
}
90
91
[Bindable(true)]
92
[Browsable(true)]
93
[Category("自定义信息区")]
94
[Description("自定义验证错误信息")]
95
[DefaultValue("")]
96
public string ValidError
97
{
98
get
{ return ViewState["ValidError"] == null ? "" : (string)ViewState["ValidError"]; }
99
set
{ ViewState["ValidError"] = value; }
100
}
101
102
[Bindable(true)]
103
[Browsable(true)]
104
[Category("自定义信息区")]
105
[Description("自定义用于验证的正则表达式,ValidType 为 Custom 时有效")]
106
[DefaultValue("")]
107
public string ValidExpressionCustom
108
{
109
get
{ return ViewState["ValidExpressionCustom"] == null ? "" : (string)ViewState["ValidExpressionCustom"]; }
110
set
{ ViewState["ValidExpressionCustom"] = value; }
111
}
112
113
[Bindable(true)]
114
[Browsable(true)]
115
[Category("自定义信息区")]
116
[Description("错误信息提示的CSS类名")]
117
[DefaultValue("")]
118
public string CssError
119
{
120
get
{ return ViewState["CssError"] == null ? "" : (string)ViewState["CssError"]; }
121
set
{ ViewState["CssError"] = value; }
122
}
123
124
[Bindable(true)]
125
[Browsable(true)]
126
[Category("自定义信息区")]
127
[Description("验证控件的前景色")]
128
[DefaultValue("")]
129
public Color ValidateForeColor
130
{
131
get
132
{
133
if (ViewState["ValidateForeColor"] == null)
134
return Color.Red;
135
return (Color)ViewState["ValidateForeColor"];
136
}
137
set
{ ViewState["ValidateForeColor"] = value; }
138
}
139
140
[Bindable(true)]
141
[Browsable(true)]
142
[Category("自定义信息区")]
143
[Description("验证控件的背景色")]
144
[DefaultValue("")]
145
public Color ValidateBackColor
146
{
147
get
148
{
149
if (ViewState["ValidateBackColor"] == null)
150
return Color.Transparent;
151
return (Color)ViewState["ValidateBackColor"];
152
}
153
set
{ ViewState["ValidateBackColor"] = value; }
154
}
155
156
[Category("自定义信息区")]
157
[DefaultValue(""), RefreshProperties(RefreshProperties.Repaint), Description("验证控件的字体大小"), NotifyParentProperty(true)]
158
public FontUnit ValidateFontSize
159
{
160
get
161
{
162
163
if (ViewState["ValidateFontSize"] != null)
164
return (FontUnit)ViewState["ValidateFontSize"];
165
return FontUnit.Medium;
166
}
167
set
{ ViewState["ValidateFontSize"] = value; }
168
}
169
170
[Category("自定义信息区")]
171
[DefaultValue("false"), RefreshProperties(RefreshProperties.Repaint), Description("验证控件的字体加粗"), NotifyParentProperty(true)]
172
public bool ValidateFontBold
173
{
174
get
175
{
176
177
if (ViewState["ValidateFontBold"] != null)
178
return (bool)ViewState["ValidateFontBold"];
179
return false;
180
}
181
set
{ ViewState["ValidateFontBold"] = value; }
182
}
183
184
[Category("自定义信息区")]
185
[DefaultValue("false"), RefreshProperties(RefreshProperties.Repaint), Description("验证控件的字体斜体"), NotifyParentProperty(true)]
186
public bool ValidateFontItalic
187
{
188
get
189
{
190
191
if (ViewState["ValidateFontItalic"] != null)
192
return (bool)ViewState["ValidateFontItalic"];
193
return false;
194
}
195
set
{ ViewState["ValidateFontItalic"] = value; }
196
}
197
198
[Category("自定义信息区")]
199
[DefaultValue("false"), RefreshProperties(RefreshProperties.Repaint), Description("验证控件的字体上划线"), NotifyParentProperty(true)]
200
public bool ValidateFontOverLine
201
{
202
get
203
{
204
205
if (ViewState["ValidateFontOverLine"] != null)
206
return (bool)ViewState["ValidateFontOverLine"];
207
return false;
208
}
209
set
{ ViewState["ValidateFontOverLine"] = value; }
210
}
211
212
[Category("自定义信息区")]
213
[DefaultValue("false"), RefreshProperties(RefreshProperties.Repaint), Description("验证控件的字体删除线"), NotifyParentProperty(true)]
214
public bool ValidateFontStrikeout
215
{
216
get
217
{
218
219
if (ViewState["ValidateFontStrikeout"] != null)
220
return (bool)ViewState["ValidateFontStrikeout"];
221
return false;
222
}
223
set
{ ViewState["ValidateFontStrikeout"] = value; }
224
}
225
[Category("自定义信息区")]
226
[DefaultValue(""), RefreshProperties(RefreshProperties.Repaint), Description("验证控件的CSSClass属性"), NotifyParentProperty(true)]
227
public string ValidateCSSClass
228
{
229
get
230
{
231
232
if (ViewState["ValidateCSSClass"] != null)
233
return ViewState["ValidateCSSClass"].ToString();
234
return string.Empty;
235
}
236
set
{ ViewState["ValidateCSSClass"] = value; }
237
}
238
[Category("自定义信息区")]
239
[DefaultValue("false"), RefreshProperties(RefreshProperties.Repaint), Description("验证控件的字体下划线"), NotifyParentProperty(true)]
240
public bool ValidateFontUnderline
241
{
242
get
243
{
244
245
if (ViewState["ValidateFontUnderline"] != null)
246
return (bool)ViewState["ValidateFontUnderline"];
247
return false;
248
}
249
set
{ ViewState["ValidateFontUnderline"] = value; }
250
}
251
[Category("自定义信息区"), DefaultValue(""), Description("验证控件的字体名")]
252
[Editor("System.Drawing.Design.FontNameEditor, System.Drawing.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor)), TypeConverter(typeof(FontConverter.FontNameConverter))]
253
public string ValidateFontName
254
{
255
get
256
{
257
if (ViewState["ValidateFontName"] != null)
258
return (string)ViewState["ValidateFontName"];
259
return string.Empty;
260
}
261
set
262
{
263
ViewState["ValidateFontName"] = value;
264
}
265
}
266
267
#endregion
268
269
构造函数#region 构造函数
270
public WebTextBox()
{ }
271
#endregion
272
273
EnsureChildControls#region EnsureChildControls
274
protected override void EnsureChildControls()
275
{
276
this.rfvDataInput.CssClass = this.CssError;
277
this.rfvDataInput.ErrorMessage = "*输入不能为空";
278
this.rfvDataInput.Display = System.Web.UI.WebControls.ValidatorDisplay.Dynamic;
279
this.rfvDataInput.EnableViewState = true;
280
this.rfvDataInput.ControlToValidate = base.ID;
281
this.rfvDataInput.ForeColor = ValidateForeColor;
282
283
this.rfvDataInput.BackColor = ValidateBackColor;
284
if (ValidateFontSize != null)
285
{
286
this.rfvDataInput.Font.Size = ValidateFontSize;
287
}
288
this.rfvDataInput.Font.Bold = ValidateFontBold;
289
this.rfvDataInput.Font.Italic = ValidateFontItalic;
290
this.rfvDataInput.Font.Strikeout = ValidateFontStrikeout;
291
this.rfvDataInput.Font.Overline = ValidateFontOverLine;
292
this.rfvDataInput.Font.Underline = ValidateFontUnderline;
293
if (!string.IsNullOrEmpty(ValidateFontName))
294
this.rfvDataInput.Font.Name = ValidateFontName;
295
if(!string.IsNullOrEmpty(ValidateCSSClass))
296
this.rfvDataInput.CssClass=ValidateCSSClass;
297
298
this.revDataInput.CssClass = this.CssError;
299
this.revDataInput.ErrorMessage = "*输入格式错误";
300
this.revDataInput.Display = System.Web.UI.WebControls.ValidatorDisplay.Dynamic;
301
this.revDataInput.EnableViewState = true;
302
this.revDataInput.ControlToValidate = base.ID;
303
this.revDataInput.ForeColor = ValidateForeColor;
304
305
this.revDataInput.BackColor = ValidateBackColor;
306
if (ValidateFontSize != null)
307
{
308
this.revDataInput.Font.Size = ValidateFontSize;
309
}
310
this.revDataInput.Font.Bold = ValidateFontBold;
311
this.revDataInput.Font.Bold = ValidateFontBold;
312
this.revDataInput.Font.Italic = ValidateFontItalic;
313
this.revDataInput.Font.Strikeout = ValidateFontStrikeout;
314
this.revDataInput.Font.Overline = ValidateFontOverLine;
315
this.revDataInput.Font.Underline = ValidateFontUnderline;
316
if (!string.IsNullOrEmpty(ValidateFontName))
317
this.revDataInput.Font.Name = ValidateFontName;
318
if (!string.IsNullOrEmpty(ValidateCSSClass))
319
this.revDataInput.CssClass = ValidateCSSClass;
320
321
//将子控件添加到此自定义控件中
322
this.Controls.Add(rfvDataInput);
323
this.Controls.Add(revDataInput);
324
this.Controls.Add(pnlFrame);
325
}
326
#endregion
327
328
/**//// <summary>
329
/// 根据设置的验证数据类型返回不同的正则表达式样
330
/// </summary>
331
/// <returns></returns>
332
GetRegex#region GetRegex
333
private string GetValidRegex()
334
{
335
string regex = @"(\S)";
336
switch (this.ValidType)
337
{
338
case DataType.Never:
339
break;
340
case DataType.Int:
341
error = "*必须为整数";
342
regex = @"(-)?(\d+)";
343
break;
344
case DataType.IntPostive:
345
error = "*必须为大于0的整数";
346
regex = @"([1-9]{1}\d*)";
347
break;
348
case DataType.IntZeroPostive:
349
error = "*必须为不小于0的整数";
350
regex = @"(\d+)";
351
break;
352
case DataType.Float:
353
error = "*必须为数字";
354
regex = @"(-)?(\d+)(((\.)(\d)+))?";
355
break;
356
case DataType.FloatPostive:
357
error = "*必须为大于0的数字";
358
regex = @"(\d+)(((\.)(\d)+))?";
359
break;
360
case DataType.FloatZeroPostive:
361
error = "*必须为不小于0的数字";
362
regex = @"(\d+)(((\.)(\d)+))?";
363
break;
364
case DataType.Url:
365
error = "*URL格式错误";
366
regex = @"(http://)?([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?";
367
break;
368
case DataType.Mail:
369
error = "*EMail格式错误";
370
regex = @"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*";
371
break;
372
case DataType.ChineseChars :
373
error = "*只能输入中文字符";
374
regex = @"[\u4e00-\u9fa5]*";
375
break;
376
case DataType.EnglishChars:
377
error = "*只能输入英文字符";
378
regex = @"[a-zA-Z]*";
379
break;
380
case DataType.EngNum:
381
error = "*只能输入英文字符和数字";
382
regex = @"[a-zA-Z0-9]*";
383
break;
384
case DataType.EngNumUnerline:
385
error = "*只能输入英文字符、数字和下划线";
386
regex = @"[a-zA-Z0-9_]*";
387
break;
388
case DataType.PhoneNumber:
389
error = "*电话号码格式错误";
390
regex = @"(86)?(-)?(0\d{2,3})?(-)?(\d{7,8})(-)?(\d{1,5})?";
391
break;
392
case DataType.MobileNumber:
393
error = "*手机号码格式错误";
394
regex = @"(0)?(1)\d{10}";
395
break;
396
case DataType.PostalCode:
397
error = "*邮编格式错误";
398
regex = @"\d{6}";
399
break;
400
case DataType.Date:
401
error = "*日期格式错误(YYYY-MM-DD)";
402
regex = @"^(((((0[48]00)|(0[1-9]((0[48])|([2468][048])|([13579][26]))))-02-29)|((0[1-9][0-9][0-9])-((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30))|(((0[1-9])|(1[0-2]))-((0[1-9])|(1[0-9])|(2[0-8])))))))|((((((([13579][26])|([2468][048]))00)|([1-9][0-9]((0[48])|([13579][26])|([2468][048]))))-02-29)|(([1-9][0-9][0-9][0-9])-((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30))|(((0[1-9])|(1[0-2]))-((0[1-9])|(1[0-9])|(2[0-8])))))))|((((00((0[48])|([2468][048])|([13579][26])))-02-29)|((00((0[1-9])|([1-9][0-9])))-((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30))|(((0[1-9])|(1[0-2]))-((0[1-9])|(1[0-9])|(2[0-8])))))))$";
403
break;
404
case DataType.IdentityCode:
405
error = "*身份证号码格式错误";
406
regex = @"\d{18}";
407
break;
408
case DataType.QQ:
409
error = "*QQ号码格式错误";
410
regex = @"[1-9][0-9]{4,}";
411
break;
412
case DataType.IP:
413
error = "*IP地址格式错误";
414
regex = @"\d+\.\d+\.\d+\.\d+";
415
break;
416
case DataType.Custom:
417
error = "*格式错误";
418
regex = this.ValidExpressionCustom;
419
break;
420
default:
421
break;
422
}
423
if (this.ValidError.Trim() != "")
424
error = this.ValidError;
425
return regex;
426
}
427
#endregion
428
429
将此控件呈现给指定的输出参数#region 将此控件呈现给指定的输出参数
430
/**//// <summary>
431
/// 将此控件呈现给指定的输出参数。
432
/// </summary>
433
/// <param name="output"> 要写出到的 HTML 编写器 </param>
434
protected override void Render(HtmlTextWriter output)
435
{
436
base.Render(output);
437
output.Write(" ");
438
439
if (!this.AllowEmpty)
440
{
441
this.rfvDataInput.ID = "rfv" + base.ID;
442
this.rfvDataInput.ControlToValidate = base.ID;
443
this.rfvDataInput.RenderControl(output);
444
}
445
446
if (this.ValidType != DataType.Never && this.ValidType != DataType.String)
447
{
448
this.revDataInput.ID = "rev" + base.ID;
449
this.revDataInput.ControlToValidate = base.ID;
450
this.revDataInput.ValidationExpression = this.GetValidRegex();
451
this.revDataInput.ErrorMessage = error;
452
this.revDataInput.RenderControl(output);
453
}
454
}
455
#endregion
456
457
}
458
}
459
using System;2
using System.Collections.Generic;3
using System.ComponentModel;4
using System.Text;5
using System.Web;6
using System.Web.UI;7
using System.Web.UI.WebControls;8
using System.Drawing;9
using System.Drawing.Design;10

11
namespace GuoyongChe.WebCtrlLib12


{13

/**//// <summary>14
/// 重写的TextBox控件15
/// Author: GuoyongChe16
/// Date: 2007-12-2217
/// Email: Guoyong.Che@Gmail.com18
/// QQ: 1989225719
/// <summary>20
/// 21

枚举数据#region 枚举数据22

/**//// <summary>23
/// 验证数据类型24
/// </summary>25
public enum DataType26

{27
Never, //不验证28
String, //字符串29
Int, //整数30
IntPostive, //大于0的整数31
IntZeroPostive, //大于等于0的整数32
Float, //数字33
FloatPostive, //大于0的数字34
FloatZeroPostive, //大于等于0的数字35
Url,36
Mail,37
Date, //日期38
ChineseChars, //汉字字符串39
EnglishChars, //英文40
EngNum, //英文和数字41
EngNumUnerline, //英文、数字和下划线42
PhoneNumber, //电话号码43
MobileNumber, //手机号码44
PostalCode, //邮政编码45
QQ, //QQ号码46
IdentityCode, //身份证号码47
IP, //IP地址48
Custom49
}50
#endregion51

52

/**//// Attribute DefaultProperty指定组件的默认属性,ToolboxData指定当从IDE工具中的工具箱中拖动自定义控件时为它生成的默认标记53
[DefaultProperty("AllowEmpty"), ToolboxData("<{0}:WebTextBox runat=server></{0}:WebTextBox>")]54

55
//类MyControl派生自WebControl56
public class WebTextBox : System.Web.UI.WebControls.TextBox57

{58

子控件#region 子控件59
//private System.Web.UI.WebControls.TextBox txtDataInput = new TextBox();60
private System.Web.UI.WebControls.RequiredFieldValidator rfvDataInput = new RequiredFieldValidator();61
private System.Web.UI.WebControls.RegularExpressionValidator revDataInput = new RegularExpressionValidator();62
private Panel pnlFrame = new Panel(); //承载其它控件的容器Panel控件63
#endregion64

65
private string error = "";66

67

控件自定义属性#region 控件自定义属性68

69
[Bindable(true)]70
[Category("自定义信息区")]71
[Browsable(true)]72
[Description("是否允许空值")]73
[DefaultValue("true")]74
public bool AllowEmpty75

{76

get
{ return ViewState["AllowEmpty"] == null ? true : (bool)ViewState["AllowEmpty"]; }77

set
{ ViewState["AllowEmpty"] = value; }78
}79

80
[Bindable(true)]81
[Category("自定义信息区")]82
[Browsable(true)]83
[Description("验证数据类型,默认为不验证")]84
[DefaultValue("IntPostive")]85
public DataType ValidType86

{87

get
{ return ViewState["ValidType"] == null ? DataType.Never : (DataType)ViewState["ValidType"]; }88

set
{ ViewState["ValidType"] = value; }89
}90

91
[Bindable(true)]92
[Browsable(true)]93
[Category("自定义信息区")]94
[Description("自定义验证错误信息")]95
[DefaultValue("")]96
public string ValidError97

{98

get
{ return ViewState["ValidError"] == null ? "" : (string)ViewState["ValidError"]; }99

set
{ ViewState["ValidError"] = value; }100
}101

102
[Bindable(true)]103
[Browsable(true)]104
[Category("自定义信息区")]105
[Description("自定义用于验证的正则表达式,ValidType 为 Custom 时有效")]106
[DefaultValue("")]107
public string ValidExpressionCustom108

{109

get
{ return ViewState["ValidExpressionCustom"] == null ? "" : (string)ViewState["ValidExpressionCustom"]; }110

set
{ ViewState["ValidExpressionCustom"] = value; }111
}112

113
[Bindable(true)]114
[Browsable(true)]115
[Category("自定义信息区")]116
[Description("错误信息提示的CSS类名")]117
[DefaultValue("")]118
public string CssError119

{120

get
{ return ViewState["CssError"] == null ? "" : (string)ViewState["CssError"]; }121

set
{ ViewState["CssError"] = value; }122
}123

124
[Bindable(true)]125
[Browsable(true)]126
[Category("自定义信息区")]127
[Description("验证控件的前景色")]128
[DefaultValue("")]129
public Color ValidateForeColor130

{131
get132

{133
if (ViewState["ValidateForeColor"] == null)134
return Color.Red;135
return (Color)ViewState["ValidateForeColor"];136
}137

set
{ ViewState["ValidateForeColor"] = value; }138
}139

140
[Bindable(true)]141
[Browsable(true)]142
[Category("自定义信息区")]143
[Description("验证控件的背景色")]144
[DefaultValue("")]145
public Color ValidateBackColor146

{147
get148

{149
if (ViewState["ValidateBackColor"] == null)150
return Color.Transparent;151
return (Color)ViewState["ValidateBackColor"];152
}153

set
{ ViewState["ValidateBackColor"] = value; }154
}155

156
[Category("自定义信息区")]157
[DefaultValue(""), RefreshProperties(RefreshProperties.Repaint), Description("验证控件的字体大小"), NotifyParentProperty(true)]158
public FontUnit ValidateFontSize159

{160
get161

{162

163
if (ViewState["ValidateFontSize"] != null)164
return (FontUnit)ViewState["ValidateFontSize"];165
return FontUnit.Medium;166
}167

set
{ ViewState["ValidateFontSize"] = value; }168
}169

170
[Category("自定义信息区")]171
[DefaultValue("false"), RefreshProperties(RefreshProperties.Repaint), Description("验证控件的字体加粗"), NotifyParentProperty(true)]172
public bool ValidateFontBold173

{174
get175

{176

177
if (ViewState["ValidateFontBold"] != null)178
return (bool)ViewState["ValidateFontBold"];179
return false;180
}181

set
{ ViewState["ValidateFontBold"] = value; }182
}183

184
[Category("自定义信息区")]185
[DefaultValue("false"), RefreshProperties(RefreshProperties.Repaint), Description("验证控件的字体斜体"), NotifyParentProperty(true)]186
public bool ValidateFontItalic187

{188
get189

{190

191
if (ViewState["ValidateFontItalic"] != null)192
return (bool)ViewState["ValidateFontItalic"];193
return false;194
}195

set
{ ViewState["ValidateFontItalic"] = value; }196
}197

198
[Category("自定义信息区")]199
[DefaultValue("false"), RefreshProperties(RefreshProperties.Repaint), Description("验证控件的字体上划线"), NotifyParentProperty(true)]200
public bool ValidateFontOverLine201

{202
get203

{204

205
if (ViewState["ValidateFontOverLine"] != null)206
return (bool)ViewState["ValidateFontOverLine"];207
return false;208
}209

set
{ ViewState["ValidateFontOverLine"] = value; }210
}211

212
[Category("自定义信息区")]213
[DefaultValue("false"), RefreshProperties(RefreshProperties.Repaint), Description("验证控件的字体删除线"), NotifyParentProperty(true)]214
public bool ValidateFontStrikeout215

{216
get217

{218

219
if (ViewState["ValidateFontStrikeout"] != null)220
return (bool)ViewState["ValidateFontStrikeout"];221
return false;222
}223

set
{ ViewState["ValidateFontStrikeout"] = value; }224
}225
[Category("自定义信息区")]226
[DefaultValue(""), RefreshProperties(RefreshProperties.Repaint), Description("验证控件的CSSClass属性"), NotifyParentProperty(true)]227
public string ValidateCSSClass228

{229
get230

{231

232
if (ViewState["ValidateCSSClass"] != null)233
return ViewState["ValidateCSSClass"].ToString();234
return string.Empty;235
}236

set
{ ViewState["ValidateCSSClass"] = value; }237
}238
[Category("自定义信息区")]239
[DefaultValue("false"), RefreshProperties(RefreshProperties.Repaint), Description("验证控件的字体下划线"), NotifyParentProperty(true)]240
public bool ValidateFontUnderline241

{242
get243

{244

245
if (ViewState["ValidateFontUnderline"] != null)246
return (bool)ViewState["ValidateFontUnderline"];247
return false;248
}249

set
{ ViewState["ValidateFontUnderline"] = value; }250
}251
[Category("自定义信息区"), DefaultValue(""), Description("验证控件的字体名")]252
[Editor("System.Drawing.Design.FontNameEditor, System.Drawing.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor)), TypeConverter(typeof(FontConverter.FontNameConverter))]253
public string ValidateFontName254

{255
get256

{257
if (ViewState["ValidateFontName"] != null)258
return (string)ViewState["ValidateFontName"];259
return string.Empty;260
}261
set262

{263
ViewState["ValidateFontName"] = value;264
}265
}266

267
#endregion268

269

构造函数#region 构造函数270

public WebTextBox()
{ }271
#endregion272

273

EnsureChildControls#region EnsureChildControls274
protected override void EnsureChildControls()275

{276
this.rfvDataInput.CssClass = this.CssError;277
this.rfvDataInput.ErrorMessage = "*输入不能为空";278
this.rfvDataInput.Display = System.Web.UI.WebControls.ValidatorDisplay.Dynamic;279
this.rfvDataInput.EnableViewState = true;280
this.rfvDataInput.ControlToValidate = base.ID;281
this.rfvDataInput.ForeColor = ValidateForeColor;282

283
this.rfvDataInput.BackColor = ValidateBackColor;284
if (ValidateFontSize != null)285

{286
this.rfvDataInput.Font.Size = ValidateFontSize;287
}288
this.rfvDataInput.Font.Bold = ValidateFontBold;289
this.rfvDataInput.Font.Italic = ValidateFontItalic;290
this.rfvDataInput.Font.Strikeout = ValidateFontStrikeout;291
this.rfvDataInput.Font.Overline = ValidateFontOverLine;292
this.rfvDataInput.Font.Underline = ValidateFontUnderline;293
if (!string.IsNullOrEmpty(ValidateFontName))294
this.rfvDataInput.Font.Name = ValidateFontName;295
if(!string.IsNullOrEmpty(ValidateCSSClass))296
this.rfvDataInput.CssClass=ValidateCSSClass;297

298
this.revDataInput.CssClass = this.CssError;299
this.revDataInput.ErrorMessage = "*输入格式错误";300
this.revDataInput.Display = System.Web.UI.WebControls.ValidatorDisplay.Dynamic;301
this.revDataInput.EnableViewState = true;302
this.revDataInput.ControlToValidate = base.ID;303
this.revDataInput.ForeColor = ValidateForeColor;304

305
this.revDataInput.BackColor = ValidateBackColor;306
if (ValidateFontSize != null)307

{308
this.revDataInput.Font.Size = ValidateFontSize;309
}310
this.revDataInput.Font.Bold = ValidateFontBold;311
this.revDataInput.Font.Bold = ValidateFontBold;312
this.revDataInput.Font.Italic = ValidateFontItalic;313
this.revDataInput.Font.Strikeout = ValidateFontStrikeout;314
this.revDataInput.Font.Overline = ValidateFontOverLine;315
this.revDataInput.Font.Underline = ValidateFontUnderline;316
if (!string.IsNullOrEmpty(ValidateFontName))317
this.revDataInput.Font.Name = ValidateFontName;318
if (!string.IsNullOrEmpty(ValidateCSSClass))319
this.revDataInput.CssClass = ValidateCSSClass;320

321
//将子控件添加到此自定义控件中322
this.Controls.Add(rfvDataInput);323
this.Controls.Add(revDataInput);324
this.Controls.Add(pnlFrame);325
}326
#endregion327

328

/**//// <summary>329
/// 根据设置的验证数据类型返回不同的正则表达式样330
/// </summary>331
/// <returns></returns>332

GetRegex#region GetRegex333
private string GetValidRegex()334

{335
string regex = @"(\S)";336
switch (this.ValidType)337

{338
case DataType.Never:339
break;340
case DataType.Int:341
error = "*必须为整数";342
regex = @"(-)?(\d+)";343
break;344
case DataType.IntPostive:345
error = "*必须为大于0的整数";346
regex = @"([1-9]{1}\d*)";347
break;348
case DataType.IntZeroPostive:349
error = "*必须为不小于0的整数";350
regex = @"(\d+)";351
break;352
case DataType.Float:353
error = "*必须为数字";354
regex = @"(-)?(\d+)(((\.)(\d)+))?";355
break;356
case DataType.FloatPostive:357
error = "*必须为大于0的数字";358
regex = @"(\d+)(((\.)(\d)+))?";359
break;360
case DataType.FloatZeroPostive:361
error = "*必须为不小于0的数字";362
regex = @"(\d+)(((\.)(\d)+))?";363
break;364
case DataType.Url:365
error = "*URL格式错误";366
regex = @"(http://)?([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?";367
break;368
case DataType.Mail:369
error = "*EMail格式错误";370
regex = @"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*";371
break;372
case DataType.ChineseChars :373
error = "*只能输入中文字符";374
regex = @"[\u4e00-\u9fa5]*";375
break;376
case DataType.EnglishChars:377
error = "*只能输入英文字符";378
regex = @"[a-zA-Z]*";379
break;380
case DataType.EngNum:381
error = "*只能输入英文字符和数字";382
regex = @"[a-zA-Z0-9]*";383
break;384
case DataType.EngNumUnerline:385
error = "*只能输入英文字符、数字和下划线";386
regex = @"[a-zA-Z0-9_]*";387
break;388
case DataType.PhoneNumber:389
error = "*电话号码格式错误";390
regex = @"(86)?(-)?(0\d{2,3})?(-)?(\d{7,8})(-)?(\d{1,5})?";391
break;392
case DataType.MobileNumber:393
error = "*手机号码格式错误";394
regex = @"(0)?(1)\d{10}";395
break;396
case DataType.PostalCode:397
error = "*邮编格式错误";398
regex = @"\d{6}";399
break;400
case DataType.Date:401
error = "*日期格式错误(YYYY-MM-DD)";402
regex = @"^(((((0[48]00)|(0[1-9]((0[48])|([2468][048])|([13579][26]))))-02-29)|((0[1-9][0-9][0-9])-((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30))|(((0[1-9])|(1[0-2]))-((0[1-9])|(1[0-9])|(2[0-8])))))))|((((((([13579][26])|([2468][048]))00)|([1-9][0-9]((0[48])|([13579][26])|([2468][048]))))-02-29)|(([1-9][0-9][0-9][0-9])-((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30))|(((0[1-9])|(1[0-2]))-((0[1-9])|(1[0-9])|(2[0-8])))))))|((((00((0[48])|([2468][048])|([13579][26])))-02-29)|((00((0[1-9])|([1-9][0-9])))-((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30))|(((0[1-9])|(1[0-2]))-((0[1-9])|(1[0-9])|(2[0-8])))))))$";403
break;404
case DataType.IdentityCode:405
error = "*身份证号码格式错误";406
regex = @"\d{18}";407
break;408
case DataType.QQ:409
error = "*QQ号码格式错误";410
regex = @"[1-9][0-9]{4,}";411
break;412
case DataType.IP:413
error = "*IP地址格式错误";414
regex = @"\d+\.\d+\.\d+\.\d+";415
break;416
case DataType.Custom:417
error = "*格式错误";418
regex = this.ValidExpressionCustom;419
break;420
default:421
break;422
}423
if (this.ValidError.Trim() != "")424
error = this.ValidError;425
return regex;426
}427
#endregion428

429

将此控件呈现给指定的输出参数#region 将此控件呈现给指定的输出参数430

/**//// <summary> 431
/// 将此控件呈现给指定的输出参数。432
/// </summary>433
/// <param name="output"> 要写出到的 HTML 编写器 </param>434
protected override void Render(HtmlTextWriter output)435

{436
base.Render(output);437
output.Write(" ");438

439
if (!this.AllowEmpty)440

{441
this.rfvDataInput.ID = "rfv" + base.ID;442
this.rfvDataInput.ControlToValidate = base.ID;443
this.rfvDataInput.RenderControl(output);444
}445

446
if (this.ValidType != DataType.Never && this.ValidType != DataType.String)447

{448
this.revDataInput.ID = "rev" + base.ID;449
this.revDataInput.ControlToValidate = base.ID;450
this.revDataInput.ValidationExpression = this.GetValidRegex();451
this.revDataInput.ErrorMessage = error;452
this.revDataInput.RenderControl(output);453
}454
}455
#endregion456

457
}458
}459

以下是运行效果图:
本人水平有限,欢迎各位朋友多多指教
浙公网安备 33010602011771号