1 #region 图片检测类
2 /// <summary>
3 /// 图片检测类
4 /// </summary>
5 public static class ImageValidation
6 {
7 #region 上传前的图片是否可靠
8 /// <summary>
9 /// 上传前的图片是否可靠
10 /// </summary>
11 public static bool IsSecureUploadPhoto(HttpPostedFile oFile)
12 {
13 bool isPhoto = false;
14 //获取图片后缀判断
15 string fileExtension = System.IO.Path.GetExtension(oFile.FileName).ToLower();
16 string[] allowedExtensions = { ".gif", ".png", ".jpeg", ".jpg", ".bmp" };
17 for (int i = 0; i < allowedExtensions.Length; i++)
18 {
19 if (fileExtension == allowedExtensions[i])
20 {
21 isPhoto = true;
22 break;
23 }
24 }
25 if (!isPhoto)
26 {
27 return false;
28 }
29 //通过图片的格式的头文件判断
30 EnumFileExtension[] fe = { EnumFileExtension.BMP, EnumFileExtension.GIF, EnumFileExtension.JPG, EnumFileExtension.PNG };
31 if (FileTop.IsAllowedExtension(oFile, fe))
32 return true;
33 else
34 return false;
35 }
36 #endregion
37
38 #region 上传后的图片是否安全
39 /// <summary>
40 /// 上传后的图片是否安全
41 /// </summary>
42 /// <param name="photoFile">物理地址</param>
43 public static bool IsSecureUpfilePhoto(string photoFile)
44 {
45 bool isPhoto = false;
46 string Img = "Yes";
47 string fileExtension = Path.GetExtension(photoFile).ToLower();
48 string[] allowedExtensions = { ".gif", ".png", ".jpeg", ".jpg", ".bmp" };
49 for (int i = 0; i < allowedExtensions.Length; i++)
50 {
51 if (fileExtension == allowedExtensions[i])
52 {
53 isPhoto = true;
54 break;
55 }
56 }
57
58 if (!isPhoto)
59 {
60 return true;
61 }
62 StreamReader sr = new StreamReader(photoFile, System.Text.Encoding.Default);
63 string strContent = sr.ReadToEnd();
64 sr.Close();
65 string str = "request|<script|.getfolder|.createfolder|.deletefolder|.createdirectory|.deletedirectory|.saveas|wscript.shell|script.encode|server.|.createobject|execute|activexobject|language=";
66 foreach (string s in str.Split('|'))
67 {
68 if (strContent.ToLower().IndexOf(s) != -1)
69 {
70 File.Delete(photoFile);
71 Img = "No";
72 break;
73 }
74 }
75 return (Img == "Yes");
76 }
77 #endregion
78 }
79 #endregion
80
81 #region 头文件检测
82 /// <summary>
83 /// 头文件检测
84 /// </summary>
85 public static class FileTop
86 {
87 #region 通过文件的头文件判断是否是允许上传的类型
88 /// <summary>
89 /// 通过文件的头文件判断是否是允许上传的类型
90 /// </summary>
91 public static bool IsAllowedExtension(HttpPostedFile oFile, EnumFileExtension[] fileEx)
92 {
93 int fileLen = oFile.ContentLength;
94 byte[] imgArray = new byte[fileLen];
95 oFile.InputStream.Read(imgArray, 0, fileLen);
96 MemoryStream ms = new MemoryStream(imgArray);
97 BinaryReader br = new BinaryReader(ms);
98 string fileclass = string.Empty;
99 try
100 {
101 var buffer = br.ReadByte();
102 fileclass = buffer.ToString();
103 buffer = br.ReadByte();
104 fileclass += buffer.ToString();
105 }
106 catch { }
107 br.Close();
108 ms.Close();
109 foreach (EnumFileExtension fe in fileEx)
110 {
111 if (Int32.Parse(fileclass) == (int)fe)
112 return true;
113 }
114 return false;
115 }
116 #endregion
117 }
118 #endregion
119
120 #region Excel检测
121 public static class ExcelValidation
122 {
123 #region 上传前的excel是否可靠
124 /// <summary>
125 /// 上传前的excel是否可靠
126 /// </summary>
127 public static bool IsSecureUploadExcel(HttpPostedFile oFile)
128 {
129 bool isPhoto = false;
130 //获取图片后缀判断
131 string fileExtension = System.IO.Path.GetExtension(oFile.FileName).ToLower();
132 string[] allowedExtensions = { ".xls", ".xlsx" };
133 for (int i = 0; i < allowedExtensions.Length; i++)
134 {
135 if (fileExtension == allowedExtensions[i])
136 {
137 isPhoto = true;
138 break;
139 }
140 }
141 if (!isPhoto)
142 {
143 return true;
144 }
145 //通过图片的格式的头文件判断
146 EnumFileExtension[] fe = { EnumFileExtension.XLS, EnumFileExtension.XLSX };
147 if (FileTop.IsAllowedExtension(oFile, fe))
148 return true;
149 else
150 return false;
151 }
152 #endregion
153
154 #region 上传后的excel是否安全
155 /// <summary>
156 /// 上传后的excel是否安全
157 /// </summary>
158 /// <param name="photoFile">物理地址</param>
159 public static bool IsSecureUpfileExcel(string photoFile)
160 {
161 bool isPhoto = false;
162 string Img = "Yes";
163 string fileExtension = Path.GetExtension(photoFile).ToLower();
164 string[] allowedExtensions = { ".xls", ".xlsx" };
165 for (int i = 0; i < allowedExtensions.Length; i++)
166 {
167 if (fileExtension == allowedExtensions[i])
168 {
169 isPhoto = true;
170 break;
171 }
172 }
173
174 if (!isPhoto)
175 {
176 return true;
177 }
178 StreamReader sr = new StreamReader(photoFile, System.Text.Encoding.Default);
179 string strContent = sr.ReadToEnd();
180 sr.Close();
181 string str = "request|<script|.getfolder|.createfolder|.deletefolder|.createdirectory|.deletedirectory|.saveas|wscript.shell|script.encode|server.|.createobject|execute|activexobject|language=";
182 foreach (string s in str.Split('|'))
183 {
184 if (strContent.ToLower().IndexOf(s) != -1)
185 {
186 File.Delete(photoFile);
187 Img = "No";
188 break;
189 }
190 }
191 return (Img == "Yes");
192 }
193 #endregion
194 }
195 #endregion
196
197 #region 正则表达式变量
198 private static Regex RegPhone = new Regex("^[0-9]+[-]?[0-9]+[-]?[0-9]$");
199 private static Regex RegNumber = new Regex("^[0-9]+$");
200 private static Regex RegNumberSign = new Regex("^[+-]?[0-9]+$");
201 private static Regex RegDecimal = new Regex("^[0-9]+[.]?[0-9]+$");
202 private static Regex RegDecimalSign = new Regex("^[+-]?[0-9]+[.]?[0-9]+$"); //等价于^[+-]?d+[.]?d+$
203 private static Regex RegEmail = new Regex("^[\w-]+@[\w-]+\.(com|net|org|edu|mil|tv|biz|info)$");//w 英文字母或数字的字符串,和 [a-zA-Z0-9] 语法一样
204 private static Regex RegCHZN = new Regex("[u4e00-u9fa5]");
205 #endregion
206
207 #region 字符串检查
208 /// <summary>
209 /// 检查字符串最大长度,返回指定长度的串
210 /// </summary>
211 /// <param name="input">输入字符串</param>
212 /// <param name="maxLength">最大长度</param>
213 /// <returns></returns>
214 public static string GetSubStr(string input, int maxLength)
215 {
216 if (input != null && input != string.Empty)
217 {
218 input = input.Trim();
219 if (input.Length > maxLength)//按最大长度截取字符串
220 input = input.Substring(0, maxLength);
221 }
222 return input;
223 }
224 #endregion
225
226 #region 数字字符串检查
227 public static bool IsPhone(string inputData)
228 {
229 Match m = RegPhone.Match(inputData);
230 return m.Success;
231 }
232 /// <summary>
233 /// 检查Request查询字符串的键值,是否是数字,最大长度限制
234 /// </summary>
235 /// <param name="req">Request</param>
236 /// <param name="inputKey">Request的键值</param>
237 /// <param name="maxLen">最大长度</param>
238 /// <returns>返回Request查询字符串</returns>
239 public static string FetchInputDigit(HttpRequest req, string inputKey, int maxLen)
240 {
241 string retVal = string.Empty;
242 if (inputKey != null && inputKey != string.Empty)
243 {
244 retVal = req.QueryString[inputKey];
245 if (null == retVal)
246 retVal = req.Form[inputKey];
247 if (null != retVal)
248 {
249 retVal = GetSubStr(retVal, maxLen);
250 if (!IsNumber(retVal))
251 retVal = string.Empty;
252 }
253 }
254 if (retVal == null)
255 retVal = string.Empty;
256 return retVal;
257 }
258 /// <summary>
259 /// 是否数字字符串
260 /// </summary>
261 /// <param name="inputData">输入字符串</param>
262 /// <returns></returns>
263 public static bool IsNumber(string inputData)
264 {
265 Match m = RegNumber.Match(inputData);
266 return m.Success;
267 }
268
269 /// <summary>
270 /// 是否数字字符串 可带正负号
271 /// </summary>
272 /// <param name="inputData">输入字符串</param>
273 /// <returns></returns>
274 public static bool IsNumberSign(string inputData)
275 {
276 Match m = RegNumberSign.Match(inputData);
277 return m.Success;
278 }
279 /// <summary>
280 /// 是否是浮点数
281 /// </summary>
282 /// <param name="inputData">输入字符串</param>
283 /// <returns></returns>
284 public static bool IsDecimal(string inputData)
285 {
286 Match m = RegDecimal.Match(inputData);
287 return m.Success;
288 }
289 /// <summary>
290 /// 是否是浮点数 可带正负号
291 /// </summary>
292 /// <param name="inputData">输入字符串</param>
293 /// <returns></returns>
294 public static bool IsDecimalSign(string inputData)
295 {
296 Match m = RegDecimalSign.Match(inputData);
297 return m.Success;
298 }
299
300 #endregion
301
302 #region 中文检测
303
304 /// <summary>
305 /// 检测是否有中文字符
306 /// </summary>
307 /// <param name="inputData"></param>
308 /// <returns></returns>
309 public static bool IsHasCHZN(string inputData)
310 {
311 Match m = RegCHZN.Match(inputData);
312 return m.Success;
313 }
314
315 #endregion
316
317 #region 日期格式判断
318 /// <summary>
319 /// 日期格式字符串判断
320 /// </summary>
321 /// <param name="str"></param>
322 /// <returns></returns>
323 public static bool IsDateTime(string str)
324 {
325 try
326 {
327 if (!string.IsNullOrEmpty(str))
328 {
329 DateTime.Parse(str);
330 return true;
331 }
332 else
333 {
334 return false;
335 }
336 }
337 catch
338 {
339 return false;
340 }
341 }
342 #endregion
343
344 #region 检测字符串长度
345 /// <summary>
346 /// 计算文本长度,区分中英文字符,中文算两个长度,英文算一个长度
347 /// </summary>
348 /// <param name="Text">需计算长度的字符串</param>
349 /// <returns>int</returns>
350 public static int Text_Length(string Text)
351 {
352 int len = 0;
353
354 for (int i = 0; i < Text.Length; i++)
355 {
356 byte[] byte_len = Encoding.Default.GetBytes(Text.Substring(i, 1));
357 if (byte_len.Length > 1)
358 len += 2; //如果长度大于1,是中文,占两个字节,+2
359 else
360 len += 1; //如果长度等于1,是英文,占一个字节,+1
361 }
362
363 return len;
364 }
365 #endregion
366
367 #region 是否由特定字符组成
368 public static bool isContainSameChar(string strInput)
369 {
370 string charInput = string.Empty;
371 if (!string.IsNullOrEmpty(strInput))
372 {
373 charInput = strInput.Substring(0, 1);
374 }
375 return isContainSameChar(strInput, charInput, strInput.Length);
376 }
377
378 public static bool isContainSameChar(string strInput, string charInput, int lenInput)
379 {
380 if (string.IsNullOrEmpty(charInput))
381 {
382 return false;
383 }
384 else
385 {
386 Regex RegNumber = new Regex(string.Format("^([{0}])+$", charInput));
387 //Regex RegNumber = new Regex(string.Format("^([{0}]{{1}})+$", charInput,lenInput));
388 Match m = RegNumber.Match(strInput);
389 return m.Success;
390 }
391 }
392 #endregion
393
394 #region 检查输入的参数是不是某些定义好的特殊字符:这个方法目前用于密码输入的安全检查
395 /// <summary>
396 /// 检查输入的参数是不是某些定义好的特殊字符:这个方法目前用于密码输入的安全检查
397 /// </summary>
398 public static bool isContainSpecChar(string strInput)
399 {
400 string[] list = new string[] { "123456", "654321" };
401 bool result = new bool();
402 for (int i = 0; i < list.Length; i++)
403 {
404 if (strInput == list[i])
405 {
406 result = true;
407 break;
408 }
409 }
410 return result;
411 }
412 #endregion
413
414 #region 验证邮箱
415 /// <summary>
416 /// 验证邮箱
417 /// </summary>
418 /// <param name="source"></param>
419 /// <returns></returns>
420 public static bool IsEmail(string source)
421 {
422 return Regex.IsMatch(source, @"^[A-Za-z0-9](([_.-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([.-]?[a-zA-Z0-9]+)*).([A-Za-z]{2,})$", RegexOptions.IgnoreCase);
423 }
424 public static bool HasEmail(string source)
425 {
426 return Regex.IsMatch(source, @"[A-Za-z0-9](([_.-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([.-]?[a-zA-Z0-9]+)*).([A-Za-z]{2,})", RegexOptions.IgnoreCase);
427 }
428 #endregion
429
430 #region 验证网址
431 /// <summary>
432 /// 验证网址
433 /// </summary>
434 /// <param name="source"></param>
435 /// <returns></returns>
436 public static bool IsUrl(string source)
437 {
438 return Regex.IsMatch(source, @"^(((file|gopher|news|nntp|telnet|http|ftp|https|ftps|sftp)://)|(www.))+(([a-zA-Z0-9._-]+.[a-zA-Z]{2,6})|([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}))(/[a-zA-Z0-9&%_./-~-]*)?$", RegexOptions.IgnoreCase);
439 }
440 public static bool HasUrl(string source)
441 {
442 return Regex.IsMatch(source, @"(((file|gopher|news|nntp|telnet|http|ftp|https|ftps|sftp)://)|(www.))+(([a-zA-Z0-9._-]+.[a-zA-Z]{2,6})|([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}))(/[a-zA-Z0-9&%_./-~-]*)?", RegexOptions.IgnoreCase);
443 }
444 #endregion
445
446 #region 验证手机号
447 /// <summary>
448 /// 验证手机号
449 /// </summary>
450 /// <param name="source"></param>
451 /// <returns></returns>
452 public static bool IsMobile(string source)
453 {
454 return Regex.IsMatch(source, @"^((13[0-9])|(14[5|7|9])|(15([0-3]|[5-9]))|(17[0|3|5-8])|(18[0-9]))d{8}$", RegexOptions.IgnoreCase);
455 }
456 public static bool HasMobile(string source)
457 {
458 return Regex.IsMatch(source, @"^((13[0-9])|(14[5|7|9])|(15([0-3]|[5-9]))|(17[0|3|5-8])|(18[0-9]))d{8}", RegexOptions.IgnoreCase);
459 }
460 #endregion
461
462 #region 验证IP
463 /// <summary>
464 /// 验证IP
465 /// </summary>
466 /// <param name="source"></param>
467 /// <returns></returns>
468 public static bool IsIP(string source)
469 {
470 return Regex.IsMatch(source, @"^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]).(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0).(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0).(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$", RegexOptions.IgnoreCase);
471 }
472 public static bool HasIP(string source)
473 {
474 return Regex.IsMatch(source, @"(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]).(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0).(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0).(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])", RegexOptions.IgnoreCase);
475 }
476 public static bool IsIp(string ip)
477 {
478 bool result = false;
479 try
480 {
481 string[] iparg = ip.Split('.');
482 if (string.Empty != ip && ip.Length < 16 && iparg.Length == 4)
483 {
484 int intip;
485 for (int i = 0; i < 4; i++)
486 {
487 intip = Convert.ToInt16(iparg[i]);
488 if (intip > 255)
489 {
490 result = false;
491 return result;
492 }
493 }
494 result = true;
495 }
496 }
497 catch
498 {
499 return result;
500 }
501 return result;
502 }
503 #endregion
504
505 #region 验证身份证是否有效
506 /// <summary>
507 /// 验证身份证是否有效
508 /// </summary>
509 /// <param name="Id"></param>
510 /// <returns></returns>
511 public static bool IsIDCard(string Id)
512 {
513 if (Id.Length == 18)
514 {
515 bool check = IsIDCard18(Id);
516 return check;
517 }
518 else if (Id.Length == 15)
519 {
520 bool check = IsIDCard15(Id);
521 return check;
522 }
523 else
524 {
525 return false;
526 }
527 }
528 public static bool IsIDCard18(string Id)
529 {
530 long n = 0;
531 if (long.TryParse(Id.Remove(17), out n) == false || n < Math.Pow(10, 16) || long.TryParse(Id.Replace('x', '0').Replace('X', '0'), out n) == false)
532 {
533 return false;//数字验证
534 }
535 string address = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91";
536 if (address.IndexOf(Id.Remove(2)) == -1)
537 {
538 return false;//省份验证
539 }
540 string birth = Id.Substring(6, 8).Insert(6, "-").Insert(4, "-");
541 DateTime time = new DateTime();
542 if (DateTime.TryParse(birth, out time) == false)
543 {
544 return false;//生日验证
545 }
546 string[] arrVarifyCode = ("1,0,x,9,8,7,6,5,4,3,2").Split(',');
547 string[] Wi = ("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2").Split(',');
548 char[] Ai = Id.Remove(17).ToCharArray();
549 int sum = 0;
550 for (int i = 0; i < 17; i++)
551 {
552 sum += int.Parse(Wi[i]) * int.Parse(Ai[i].ToString());
553 }
554 int y = -1;
555 Math.DivRem(sum, 11, out y);
556 if (arrVarifyCode[y] != Id.Substring(17, 1).ToLower())
557 {
558 return false;//校验码验证
559 }
560 return true;//符合GB11643-1999标准
561 }
562 public static bool IsIDCard15(string Id)
563 {
564 long n = 0;
565 if (long.TryParse(Id, out n) == false || n < Math.Pow(10, 14))
566 {
567 return false;//数字验证
568 }
569 string address = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91";
570 if (address.IndexOf(Id.Remove(2)) == -1)
571 {
572 return false;//省份验证
573 }
574 string birth = Id.Substring(6, 6).Insert(4, "-").Insert(2, "-");
575 DateTime time = new DateTime();
576 if (DateTime.TryParse(birth, out time) == false)
577 {
578 return false;//生日验证
579 }
580 return true;//符合15位身份证标准
581 }
582 #endregion
583
584 #region 是不是Int型的
585 /// <summary>
586 /// 是不是Int型的
587 /// </summary>
588 /// <param name="source"></param>
589 /// <returns></returns>
590 public static bool IsInt(string source)
591 {
592 Regex regex = new Regex(@"^(-){0,1}d+$");
593 if (regex.Match(source).Success)
594 {
595 if ((long.Parse(source) > 0x7fffffffL) || (long.Parse(source) < -2147483648L))
596 {
597 return false;
598 }
599 return true;
600 }
601 return false;
602 }
603 #endregion
604
605 #region 看字符串的长度是不是在限定数之间 一个中文为两个字符
606 /// <summary>
607 /// 看字符串的长度是不是在限定数之间 一个中文为两个字符
608 /// </summary>
609 /// <param name="source">字符串</param>
610 /// <param name="begin">大于等于</param>
611 /// <param name="end">小于等于</param>
612 /// <returns></returns>
613 public static bool IsLengthStr(string source, int begin, int end)
614 {
615 int length = Regex.Replace(source, @"[^x00-xff]", "OK").Length;
616 if ((length <= begin) && (length >= end))
617 {
618 return false;
619 }
620 return true;
621 }
622 #endregion
623
624 #region 是不是中国电话,格式010-85849685
625 /// <summary>
626 /// 是不是中国电话,格式010-85849685
627 /// </summary>
628 /// <param name="source"></param>
629 /// <returns></returns>
630 public static bool IsTel(string source)
631 {
632 return Regex.IsMatch(source, @"^d{3,4}-?d{6,8}$", RegexOptions.IgnoreCase);
633 }
634 #endregion
635
636 #region 邮政编码 6个数字
637 /// <summary>
638 /// 邮政编码 6个数字
639 /// </summary>
640 /// <param name="source"></param>
641 /// <returns></returns>
642 public static bool IsPostCode(string source)
643 {
644 return Regex.IsMatch(source, @"^d{6}$", RegexOptions.IgnoreCase);
645 }
646 #endregion
647
648 #region 中文
649 /// <summary>
650 /// 中文
651 /// </summary>
652 /// <param name="source"></param>
653 /// <returns></returns>
654 public static bool IsChinese(string source)
655 {
656 return Regex.IsMatch(source, @"^[u4e00-u9fa5]+$", RegexOptions.IgnoreCase);
657 }
658 public static bool hasChinese(string source)
659 {
660 return Regex.IsMatch(source, @"[u4e00-u9fa5]+", RegexOptions.IgnoreCase);
661 }
662 #endregion
663
664 #region 验证是不是正常字符 字母,数字,下划线的组合
665 /// <summary>
666 /// 验证是不是正常字符 字母,数字,下划线的组合
667 /// </summary>
668 /// <param name="source"></param>
669 /// <returns></returns>
670 public static bool IsNormalChar(string source)
671 {
672 return Regex.IsMatch(source, @"[wd_]+", RegexOptions.IgnoreCase);
673 }
674 #endregion
675
676 #region 验证用户名:必须以字母开头,可以包含字母、数字、“_”、“.”,至少5个字符
677 /// <summary>
678 /// 验证用户名:必须以字母开头,可以包含字母、数字、“_”、“.”,至少5个字符
679 /// </summary>
680 /// <param name="str"></param>
681 /// <returns></returns>
682 public static bool checkUserId(string str)
683 {
684 Regex regex = new Regex("[a-zA-Z]{1}([a-zA-Z0-9]|[._]){4,19}");
685 if (regex.Match(str).Success)
686 if (regex.Matches(str)[0].Value.Length == str.Length)
687 return true;
688 return false;
689 }
690 #endregion
691
692 #region 验证是否为小数
693 static bool IsValidDecimal(string strIn)
694 {
695 return Regex.IsMatch(strIn, @"[0].d{1,2}|[1]");
696 }
697 #endregion
698
699 #region 验证年月日
700 static bool IsValidDate(string strIn)
701 {
702 return Regex.IsMatch(strIn, @"^2d{3}-(?:0?[1-9]|1[0-2])-(?:0?[1-9]|[1-2]d|3[0-1])(?:0?[1-9]|1d|2[0-3]):(?:0?[1-9]|[1-5]d):(?:0?[1-9]|[1-5]d)$");
703 }
704 #endregion
705
706 #region 验证日期格式
707 //检察是否正确的日期格式
708 public static bool IsDate(string str)
709 {
710 //考虑到了4年一度的366天,还有特殊的2月的日期
711 Regex reg = new Regex(@"^((((1[6-9]|[2-9]d)d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]d|3[01]))|(((1[6-9]|[2-9]d)d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]d|30))|(((1[6-9]|[2-9]d)d{2})-0?2-(0?[1-9]|1d|2[0-8]))|(((1[6-9]|[2-9]d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-)) (20|21|22|23|[0-1]?d):[0-5]?d:[0-5]?d$");
712 return reg.IsMatch(str);
713 }
714 #endregion
715
716 #region 验证后缀名
717 static bool IsValidPostfix(string strIn)
718 {
719 return Regex.IsMatch(strIn, @".(?i:gif|jpg)$");
720 }
721 #endregion
722
723 #region 验证字符是否在4至12之间
724 static bool IsValidByte(string strIn)
725 {
726 return Regex.IsMatch(strIn, @"^[a-z]{4,12}$");
727 }
728 #endregion
729
730 #region 验证是否包含汉语/全部汉语
731 /// <summary>
732 /// 验证是否包含汉语
733 /// </summary>
734 /// <param name="str"></param>
735 /// <returns></returns>
736 public static bool IsHanyu(string str)
737 {
738 Regex regex = new Regex("[u4e00-u9fa5]");
739 if (regex.Match(str).Success)
740 return true;
741 else
742 return false;
743 }
744 /// <summary>
745 /// 验证是否全部汉语
746 /// </summary>
747 /// <param name="str"></param>
748 /// <returns></returns>
749 public static bool IsHanyuAll(string str)
750 {
751 Regex regex = new Regex("[u4e00-u9fa5]");
752 //匹配的内容长度和被验证的内容长度相同时,验证通过
753 if (regex.Match(str).Success)
754 if (regex.Matches(str).Count == str.Length)
755 return true;
756 //其它,未通过
757 return false;
758 }
759 #endregion