using System;
using System.Collections;
using System.Text.RegularExpressions; namespace MSCL
{
//// <summary>
/// RegularMatch正则验证类
/// </summary>
public class RegHelper
{
private string _String;
private bool _IsEntirety; /**//// <summary>
/// 可以进行判断的类型
/// </summary>
public enum Operation
{
Byte, SByte, Int16, Int32, Int64, Single, Double, Boolean, Char, Decimal, DateTime, Date, Time,
EMail, URL, ChinaPhone, ChineseWord, ChinesePostalCode, Number, StringModel_01, StringModel_02, WideWord, NarrowWord, IPAddress,
ChineseMobile, ChineseID
}; #region 用于判断字符串是否是对应类型(默认为包含匹配)
/// <summary>
/// 用于判断字符串是否是对应类型
/// <code>
/// MSCL.RegHelper rm = new MSCL.RegHelper();
/// Response.Write(rm.IsAccordType("123", MSCL.RegHelper.Operation.ChineseWord));
/// </code>
/// </summary>
/// <param name="strVerifyString">String,需要判断的字符串</param>
/// <param name="op">Operation枚举,用于选择需要进行的操作</param>
/// <returns></returns>
public bool IsAccordType(string strVerifyString, Operation op)
{
return IsAccordType(strVerifyString, op, false);
}
#endregion #region 用于判断字符串是否是对应类型(或是否包含对应类型的字符)
/**//// <summary>
/// 用于判断字符串是否是对应类型
/// </summary>
/// <param name="strVerifyString">String,需要判断的字符串</param>
/// <param name="op">Operation枚举,用于选择需要进行的操作</param>
/// <param name="IsEntirety">Boolean,判断是完全匹配还是包含匹配模式(仅适用于非类型判断时)</param>
/// <returns></returns>
public bool IsAccordType(string strVerifyString, Operation op, bool IsEntirety)
{
_String = strVerifyString;
_IsEntirety = IsEntirety; switch (op)
{
case Operation.Byte:
{
return IsByte();
}
case Operation.SByte:
{
return IsSByte();
}
case Operation.Int16:
{
return IsInt16();
}
case Operation.Int32:
{
return IsInt32();
}
case Operation.Int64:
{
return IsInt64();
}
case Operation.Single:
{
return IsSingle();
}
case Operation.Double:
{
return IsDouble();
}
case Operation.Boolean:
{
return IsBoolean();
}
case Operation.Char:
{
return IsChar();
}
case Operation.Decimal:
{
return IsDecimal();
}
case Operation.DateTime:
{
return IsDateTime();
}
case Operation.Date:
{
return IsDate();
}
case Operation.Time:
{
return IsTime();
}
case Operation.IPAddress:
{
return IsIPAddress();
}
case Operation.ChinaPhone:
{
return IsChinaPhone();
}
case Operation.ChinesePostalCode:
{
return IsChinesePostalCode();
}
case Operation.ChineseMobile:
{
return IsChineseMobile();
}
case Operation.EMail:
{
return IsEmail();
}
case Operation.URL:
{
return IsURL();
}
case Operation.ChineseWord:
{
return IsChineseWord();
}
case Operation.Number:
{
return IsNumber();
}
case Operation.StringModel_01:
{
return IsStringModel_01();
}
case Operation.StringModel_02:
{
return IsStringModel_02();
}
case Operation.WideWord:
{
return IsWideWord();
}
case Operation.NarrowWord:
{
return IsNarrowWord();
}
case Operation.ChineseID:
{
return IsChineseID();
}
default:
{
return false;
}
}
}
#endregion #region 具体验证方法 #region 是否Byte类型(8 位的无符号整数): 0 和 255 之间的无符号整数
/**//// <summary>
/// 是否Byte类型(8 位的无符号整数): 0 和 255 之间的无符号整数
/// </summary>
/// <returns>Boolean</returns>
protected bool IsByte()
{
try
{
Byte.Parse(_String);
}
catch
{
return false;
}
return true;
}
#endregion #region 是否SByte类型(8 位的有符号整数): -128 到 +127 之间的整数
/**//// <summary>
/// 是否SByte类型(8 位的有符号整数): -128 到 +127 之间的整数
/// </summary>
/// <returns>Boolean</returns>
protected bool IsSByte()
{
try
{
SByte.Parse(_String);
}
catch
{
return false;
}
return true;
}
#endregion #region 是否Int16类型(16 位的有符号整数): -32768 到 +32767 之间的有符号整数
/**//// <summary>
/// 是否Int16类型(16 位的有符号整数): -32768 到 +32767 之间的有符号整数
/// </summary>
/// <returns>Boolean</returns>
protected bool IsInt16()
{
try
{
Int16.Parse(_String);
}
catch
{
return false;
}
return true;
}
#endregion #region 是否Int32类型(32 位的有符号整数):-2,147,483,648 到 +2,147,483,647 之间的有符号整数
/**//// <summary>
/// 是否Int32类型(32 位的有符号整数):-2,147,483,648 到 +2,147,483,647 之间的有符号整数
/// </summary>
/// <returns>Boolean</returns>
protected bool IsInt32()
{
try
{
Int32.Parse(_String);
}
catch
{
return false;
}
return true;
}
#endregion #region 是否Int64类型(64 位的有符号整数): -9,223,372,036,854,775,808 到 +9,223,372,036,854,775,807 之间的整数
/**//// <summary>
/// 是否Int64类型(64 位的有符号整数): -9,223,372,036,854,775,808 到 +9,223,372,036,854,775,807 之间的整数
/// </summary>
/// <returns>Boolean</returns>
protected bool IsInt64()
{
try
{
Int64.Parse(_String);
}
catch
{
return false;
}
return true;
}
#endregion #region 是否Single类型(单精度(32 位)浮点数字): -3.402823e38 和 +3.402823e38 之间的单精度 32 位数字
/**//// <summary>
/// 是否Single类型(单精度(32 位)浮点数字): -3.402823e38 和 +3.402823e38 之间的单精度 32 位数字
/// </summary>
/// <returns>Boolean</returns>
protected bool IsSingle()
{
try
{
Single.Parse(_String);
}
catch
{
return false;
}
return true;
}
#endregion #region 是否Double类型(单精度(64 位)浮点数字): -1.79769313486232e308 和 +1.79769313486232e308 之间的双精度 64 位数字
/**//// <summary>
/// 是否Double类型(单精度(64 位)浮点数字): -1.79769313486232e308 和 +1.79769313486232e308 之间的双精度 64 位数字
/// </summary>
/// <returns>Boolean</returns>
protected bool IsDouble()
{
try
{
Double.Parse(_String);
}
catch
{
return false;
}
return true;
}
#endregion #region 是否Boolean类型(布尔值):true 或 false
/**//// <summary>
/// 是否Double类型(单精度(64 位)浮点数字): -1.79769313486232e308 和 +1.79769313486232e308 之间的双精度 64 位数字
/// </summary>
/// <returns>Boolean</returns>
protected bool IsBoolean()
{
try
{
Boolean.Parse(_String);
}
catch
{
return false;
}
return true;
}
#endregion #region 是否Char类型(Unicode(16 位)字符):该 16 位数字的值范围为从十六进制值 0x0000 到 0xFFFF
/**//// <summary>
/// 是否Char类型(Unicode(16 位)字符):该 16 位数字的值范围为从十六进制值 0x0000 到 0xFFFF
/// </summary>
/// <returns>Boolean</returns>
protected bool IsChar()
{
try
{
Char.Parse(_String);
}
catch
{
return false;
}
return true;
}
#endregion #region 是否Char类型(96 位十进制值):从正 79,228,162,514,264,337,593,543,950,335 到负 79,228,162,514,264,337,593,543,950,335 之间的十进制数
/**//// <summary>
/// 是否Char类型(96 位十进制值):从正 79,228,162,514,264,337,593,543,950,335 到负 79,228,162,514,264,337,593,543,950,335 之间的十进制数
/// </summary>
/// <returns>Boolean</returns>
protected bool IsDecimal()
{
try
{
Decimal.Parse(_String);
}
catch
{
return false;
}
return true;
}
#endregion #region 是否DateTime类型(表示时间上的一刻): 范围在公元(基督纪元)0001 年 1 月 1 日午夜 12:00:00 到公元 (C.E.) 9999 年 12 月 31 日晚上 11:59:59 之间的日期和时间
/**//// <summary>
/// 是否DateTime类型(表示时间上的一刻): 范围在公元(基督纪元)0001 年 1 月 1 日午夜 12:00:00 到公元 (C.E.) 9999 年 12 月 31 日晚上 11:59:59 之间的日期和时间
/// </summary>
/// <returns>Boolean</returns>
protected bool IsDateTime()
{
try
{
DateTime.Parse(_String);
}
catch
{
return false;
}
return true;
}
#endregion #region 是否Date类型(表示时间的日期部分): 范围在公元(基督纪元)0001 年 1 月 1 日 到公元 (C.E.) 9999 年 12 月 31 日之间的日期
/**//// <summary>
/// 是否Date类型(表示时间的日期部分): 范围在公元(基督纪元)0001 年 1 月 1 日 到公元 (C.E.) 9999 年 12 月 31 日之间的日期
/// </summary>
/// <returns>Boolean</returns>
protected bool IsDate()
{
DateTime Value;
try
{
Value = DateTime.Parse(_String);
}
catch
{
return false;
}
if (Value.Date.ToString() == _String)
{
return true;
}
else
{
return false;
}
}
#endregion #region 是否Time类型(表示时间部分HHMMSS): 范围在夜 12:00:00 到晚上 11:59:59 之间的时间
/**//// <summary>
/// 是否Time类型(表示时间部分HHMMSS): 范围在夜 12:00:00 到晚上 11:59:59 之间的时间
/// </summary>
/// <returns>Boolean</returns>
protected bool IsTime()
{
DateTime Value;
try
{
Value = DateTime.Parse(_String);
}
catch
{
return false;
}
if (Value.Year == && Value.Month == && Value.Day == )
{
return true;
}
else
{
return false;
}
}
#endregion #region 是否IPAddress类型(IPv4 的情况下使用以点分隔的四部分表示法格式表示,IPv6 的情况下使用冒号与十六进制格式表示)
/**//// <summary>
/// 是否IPAddress类型(IPv4 的情况下使用以点分隔的四部分表示法格式表示,IPv6 的情况下使用冒号与十六进制格式表示)
/// </summary>
/// <returns>Boolean</returns>
protected bool IsIPAddress()
{
try
{
System.Net.IPAddress.Parse(_String);
}
catch
{
return false;
}
return true;
}
#endregion #region 是否中国电话号码类型(XXX/XXXX-XXXXXXX/XXXXXXXX (\d{3,4})-?\d{7,8}):判断是否是(区号:3或4位)-(电话号码:7或8位)
/**//// <summary>
/// 是否中国电话号码类型(XXX/XXXX-XXXXXXX/XXXXXXXX (\d{3,4})-?\d{7,8}):判断是否是(区号:3或4位)-(电话号码:7或8位)
/// </summary>
/// <returns>Boolean</returns>
protected bool IsChinaPhone()
{
ArrayList aryResult = new ArrayList();
return CommRegularMatch(_String, @"(\d{3,4})-?\d{7,8}", RegexOptions.None, ref aryResult, _IsEntirety);
}
#endregion #region 是否中国邮政编码(6位数字 \d{6})
/**//// <summary>
/// 是否中国邮政编码(6位数字 \d{6})
/// </summary>
/// <returns>Boolean</returns>
protected bool IsChinesePostalCode()
{
ArrayList aryResult = new ArrayList();
return CommRegularMatch(_String, @"\d{6}", RegexOptions.None, ref aryResult, _IsEntirety);
}
#endregion #region 是否中国移动电话号码(13开头的总11位数字 13\d{9})
/**//// <summary>
/// 是否中国移动电话号码(13开头的总11位数字 13\d{9})
/// </summary>
/// <returns>Boolean</returns>
protected bool IsChineseMobile()
{
ArrayList aryResult = new ArrayList();
return CommRegularMatch(_String, @"13\d{9}", RegexOptions.None, ref aryResult, _IsEntirety);
}
#endregion #region 是否EMail类型(XXX@XXX.XXX \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)
/**//// <summary>
/// 是否EMail类型(XXX@XXX.XXX \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)
/// </summary>
/// <returns>Boolean</returns>
protected bool IsEmail()
{
ArrayList aryResult = new ArrayList();
return CommRegularMatch(_String, @"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", RegexOptions.None, ref aryResult, _IsEntirety);
}
#endregion #region 是否Internet URL地址类型(http://)
/**//// <summary>
/// 是否Internet URL地址类型(http://)
/// </summary>
/// <returns>Boolean</returns>
protected bool IsURL()
{
ArrayList aryResult = new ArrayList();
return CommRegularMatch(_String, @"http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?", RegexOptions.None, ref aryResult, _IsEntirety);
}
#endregion #region 是否中文字符([\u4e00-\u9fa5])
/**//// <summary>
/// 是否中文字符([\u4e00-\u9fa5])
/// </summary>
/// <returns>Boolean</returns>
protected bool IsChineseWord()
{
ArrayList aryResult = new ArrayList();
return CommRegularMatch(_String, @"[\u4e00-\u9fa5]", RegexOptions.None, ref aryResult, _IsEntirety);
}
#endregion #region 是否是数字(0到9的数字[\d]+):不包括符号"."和"-"
/**//// <summary>
/// 是否是数字(0到9的数字[\d]+):不包括符号"."和"-"
/// </summary>
/// <returns>Boolean</returns>
protected bool IsNumber()
{
ArrayList aryResult = new ArrayList();
return CommRegularMatch(_String, @"[\d]+", RegexOptions.None, ref aryResult, _IsEntirety);
}
#endregion #region 是否只包含数字,英文和下划线([\w]+)
/**//// <summary>
/// 是否只包含数字,英文和下划线([\w]+)
/// </summary>
/// <returns>Boolean</returns>
protected bool IsStringModel_01()
{
ArrayList aryResult = new ArrayList();
return CommRegularMatch(_String, @"[\w]+", RegexOptions.None, ref aryResult, _IsEntirety);
}
#endregion #region 是否大写首字母的英文字母([A-Z][a-z]+)
/**//// <summary>
/// 是否大写首字母的英文字母([A-Z][a-z]+)
/// </summary>
/// <returns>Boolean</returns>
protected bool IsStringModel_02()
{
ArrayList aryResult = new ArrayList();
return CommRegularMatch(_String, @"[A-Z][a-z]+", RegexOptions.None, ref aryResult, _IsEntirety);
}
#endregion #region 是否全角字符([^\x00-\xff]):包括汉字在内
/**//// <summary>
/// 是否全角字符([^\x00-\xff]):包括汉字在内
/// </summary>
/// <returns>Boolean</returns>
protected bool IsWideWord()
{
ArrayList aryResult = new ArrayList();
return CommRegularMatch(_String, @"[^\x00-\xff]", RegexOptions.None, ref aryResult, _IsEntirety);
}
#endregion #region 是否半角字符([\x00-\xff])
/**//// <summary>
/// 是否半角字符([^\x00-\xff]):包括汉字在内
/// </summary>
/// <returns>Boolean</returns>
protected bool IsNarrowWord()
{
ArrayList aryResult = new ArrayList();
return CommRegularMatch(_String, @"[\x00-\xff]", RegexOptions.None, ref aryResult, _IsEntirety);
}
#endregion #region 是否合法的中国身份证号码
protected bool IsChineseID()
{
if (_String.Length == )
{
_String = CidUpdate(_String);
}
if (_String.Length == )
{
string strResult = CheckCidInfo(_String);
if (strResult == "非法地区" || strResult == "非法生日" || strResult == "非法证号")
{
return false;
}
else
{
return true;
}
}
else
{
return false;
}
}
#endregion #endregion #region 通用正则表达式判断函数
/**//// <summary>
/// 通用正则表达式判断函数
/// </summary>
/// <param name="strVerifyString">String,用于匹配的字符串</param>
/// <param name="strRegular">String,正则表达式</param>
/// <param name="regOption">RegexOptions,配置正则表达式的选项</param>
/// <param name="aryResult">ArrayList,分解的字符串内容</param>
/// <param name="IsEntirety">Boolean,是否需要完全匹配</param>
/// <returns></returns>
public bool CommRegularMatch(string strVerifyString, string strRegular, System.Text.RegularExpressions.RegexOptions regOption, ref System.Collections.ArrayList aryResult, bool IsEntirety)
{
System.Text.RegularExpressions.Regex r;
System.Text.RegularExpressions.Match m; #region 如果需要完全匹配的处理
if (IsEntirety)
{
strRegular = strRegular.Insert(, @"\A");
strRegular = strRegular.Insert(strRegular.Length, @"\z");
}
#endregion try
{
r = new System.Text.RegularExpressions.Regex(strRegular, regOption);
}
catch (System.Exception e)
{
throw (e);
} for (m = r.Match(strVerifyString); m.Success; m = m.NextMatch())
{
aryResult.Add(m);
} if (aryResult.Count == )
{
return false;
}
else
{
return true;
}
}
#endregion #region 中国身份证号码验证
private string CheckCidInfo(string cid)
{
string[] aCity = new string[] { null, null, null, null, null, null, null, null, null, null, null, "北京", "天津", "河北", "山西", "内蒙古", null, null, null, null, null, "辽宁", "吉林", "黑龙江", null, null, null, null, null, null, null, "上海", "江苏", "浙江", "安微", "福建", "江西", "山东", null, null, null, "河南", "湖北", "湖南", "广东", "广西", "海南", null, null, null, "重庆", "四川", "贵州", "云南", "西藏", null, null, null, null, null, null, "陕西", "甘肃", "青海", "宁夏", "新疆", null, null, null, null, null, "台湾", null, null, null, null, null, null, null, null, null, "香港", "澳门", null, null, null, null, null, null, null, null, "国外" };
double iSum = ;
string info = string.Empty;
System.Text.RegularExpressions.Regex rg = new System.Text.RegularExpressions.Regex(@"^\d{17}(\d|x)$");
System.Text.RegularExpressions.Match mc = rg.Match(cid);
if (!mc.Success)
{
return string.Empty;
}
cid = cid.ToLower();
cid = cid.Replace("x", "a");
if (aCity[int.Parse(cid.Substring(, ))] == null)
{
return "非法地区";
}
try
{
DateTime.Parse(cid.Substring(, ) + " - " + cid.Substring(, ) + " - " + cid.Substring(, ));
}
catch
{
return "非法生日";
}
for (int i = ; i >= ; i--)
{
iSum += (System.Math.Pow(, i) % ) * int.Parse(cid[ - i].ToString(), System.Globalization.NumberStyles.HexNumber);
}
if (iSum % != )
{
return ("非法证号");
}
else
{
return (aCity[int.Parse(cid.Substring(, ))] + "," + cid.Substring(, ) + "-" + cid.Substring(, ) + "-" + cid.Substring(, ) + "," + (int.Parse(cid.Substring(, )) % == ? "男" : "女"));
}
}
#endregion #region 身份证号码15升级为18位
private string CidUpdate(string ShortCid)
{
char[] strJiaoYan = { '', '', 'X', '', '', '', '', '', '', '', '' };
int[] intQuan = { , , , , , , , , , , , , , , , , , };
string strTemp;
int intTemp = ; strTemp = ShortCid.Substring(, ) + "" + ShortCid.Substring();
for (int i = ; i <= strTemp.Length - ; i++)
{
intTemp += int.Parse(strTemp.Substring(i, )) * intQuan[i];
}
intTemp = intTemp % ;
return strTemp + strJiaoYan[intTemp];
}
#endregion
}
}

Asp.net(C#)常用正则表达式封装的更多相关文章

  1. 【转】【Asp.Net MVC】asp.net mvc Model验证总结及常用正则表达式

    本文属转载,来源: http://www.byywee.com/page/M0/S868/868615.html 关于Model验证官方资料: http://msdn.microsoft.com/zh ...

  2. 【Asp.Net MVC】asp.net mvc Model验证总结及常用正则表达式

    转自:http://www.cnblogs.com/easy5weikai/p/3843131.html 关于Model验证官方资料: http://msdn.microsoft.com/zh-cn/ ...

  3. asp.net mvc Model验证总结及常用正则表达式【转载】

    关于Model验证官方资料: http://msdn.microsoft.com/zh-cn/library/system.componentmodel.dataannotations.aspx AS ...

  4. mvc Model验证总结及常用正则表达式

    本文属转载,来源: http://www.byywee.com/page/M0/S868/868615.html 关于Model验证官方资料: http://msdn.microsoft.com/zh ...

  5. Javascript正则构造函数与正则表达字面量&&常用正则表达式

    本文不讨论正则表达式入门,即如何使用正则匹配.讨论的是两种创建正则表达式的优劣和一些细节,最后给出一些常用正则匹配表达式. Javascript中的正则表达式也是对象,我们可以使用两种方法创建正则表达 ...

  6. asp.net mvc 自定义pager封装与优化

    asp.net mvc 自定义pager封装与优化 Intro 之前做了一个通用的分页组件,但是有些不足,从翻页事件和分页样式都融合在后台代码中,到翻页事件可以自定义,再到翻页和样式都和代码分离, 自 ...

  7. [python] 常用正则表达式爬取网页信息及分析HTML标签总结【转】

    [python] 常用正则表达式爬取网页信息及分析HTML标签总结 转http://blog.csdn.net/Eastmount/article/details/51082253 标签: pytho ...

  8. 常用正则表达式-copy

    匹配中文:[\u4e00-\u9fa5] 英文字母:[a-zA-Z] 数字:[0-9] 匹配中文,英文字母和数字及_: ^[\u4e00-\u9fa5_a-zA-Z0-9]+$ 同时判断输入长度:[\ ...

  9. ASP.NET中常用的几个李天平开源公共类LTP.Common,Maticsoft.DBUtility,LtpPageControl

    ASP.NET中常用的几个开源公共类: LTP.Common.dll: 通用函数类库     源码下载Maticsoft.DBUtility.dll 数据访问类库组件     源码下载LtpPageC ...

随机推荐

  1. docker toolbox在win7下的安装

    1.下载安装docker toolbox docker toolbox的下载地址: http://mirrors.aliyun.com/docker-toolbox/windows/docker-to ...

  2. 机器学习-分类器-级联分类器训练(Train CascadeClassifier )

    一.简介: adaboost分类器由级联分类器构成,"级联"是指最终的分类器是由几个简单分类器级联组成.在图像检测中,被检窗口依次通过每一级分类器,这样在前面几层的检测中大部分的候 ...

  3. 查看JAVA的class二进制文件的方法

    hexdump -C filename可以查看二进制文件. 比如java的Test.java public class Test{ public static void main(String[] a ...

  4. Vim 中如何去掉 ^M 字符

    基于 DOS/Windows 的文本文件在每一行末尾有一个 CR(回车)和 LF(换行),而 UNIX 文本只有一个换行,即win每行结尾为\r\n,而linux只有一个\n如果win下的文档上传到l ...

  5. JSjs获取当前时间的前一天/后一天(昨天/明天)

    Date curDate = new Date(); var preDate = new Date(curDate.getTime() - 24*60*60*1000); //前一天 var next ...

  6. MySQL 简单存储过程实现Redis的INCR功能

    USE test; DROP PROCEDURE IF EXISTS pro_testincrement; DELIMITER && CREATE PROCEDURE pro_test ...

  7. Hibernate学习笔记二:常用映射配置

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6760895.html 一:单向一对一 常用唯一外键的方法来配置单向一对一关系. 1:实体关系 类A中有类B对象 ...

  8. MySQL中 PK NN UQ BIN UN ZF AI 的意思

    PK   Belongs to primary key作为主键 NN   Not Null非空 UQ  Unique index不能重复 BIN  Is binary column存放二进制数据的列 ...

  9. RPC远程调用概念 &amp;&amp; demo实例

    RPC是指远程过程调用,直观说法就是A通过网络调用B的过程方法. 也就是说两台serverA.B,一个应用部署在Aserver上,想要调用Bserver上应用提供的函数/方法,因为不在一个内存空间,不 ...

  10. iOS中TableView小技巧

    摘要: TableView是ios开发中经经常使用到的控件,这里统一记录一下开发中遇到的经常使用小技巧,不断探索更新.也希望大家能够告诉我很多其它经常使用的小技巧啦~一起进步 1.去除多余的列表线条 ...