比较完整正则表达式类

来源:互联网 发布:打开手机淘宝 编辑:程序博客网 时间:2024/05/16 05:52

/**********************************************************
 * 
 * 功能描述:主要是处理一些常规字符正则验证操作
 * 创建时间:2009-05-21
 * 创建者:陈国利 cgli200@gmail.com
 *
 * *********************************************************/

using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;

namespace DY.Utrility
{
    /// <summary>
    /// 正则验证表达式,主要使用静态方法
    /// </summary>
   public class RegexHelper
    {
       /// <summary>
       /// 构造函数,防止外部构造
       /// </summary>
       private RegexHelper()
       {

       }

       private static bool IsRegex(string pattern, string input)
       {
           Regex reg = new Regex(pattern, RegexOptions.Compiled);
           return reg.IsMatch(input);
       }

       /// <summary>
       /// 验证是否是数字
       /// </summary>
       /// <param name="input">输了待验证字符串</param>
       /// <returns>如果是数字返回true,否则返回false</returns>
       public static bool IsNumeric(string input)
       {
           return IsRegex(@"[0-9]", input);
       }

       /// <summary>
       /// 验证是否整数(正整数 + 负整数)
       /// </summary>
       /// <param name="input">输了待验证字符串</param>
       /// <returns>如果是返回true,否则返回false</returns>
       public static bool IsInteger(string input)
       {
           return IsRegex(@"^/d+$", input);

       }

       /// <summary>
       /// 验证是否是正整数
       /// </summary>
       /// <param name="input">输了待验证字符串</param>
       /// <returns>如果是返回true,否则返回false</returns>
       public static bool IsPositiveInteger(string input)
       {
           return IsRegex(@"^[1-9]/d*$", input);

       }

       /// <summary>
       /// 验证是否是负整数
       /// </summary>
       /// <param name="input">输了待验证字符串</param>
       /// <returns>如果是返回true,否则返回false</returns>
       public static bool IsNativeInteger(string input)
       {
           return  IsRegex(@"^-[0-9]*[1-9][0-9]*$", input);
       }

       /// <summary>
       /// 验证是否非负整数(包括负整数和0)
       /// </summary>
       /// <param name="input">输了待验证字符串</param>
       /// <returns>如果是返回true,否则返回false</returns>
       public static bool IsNoNativeInteger(string input)
       {
           return IsRegex(@"^-?/d+$", input);
       }

       /// <summary>
       /// 验证非正整数(负整数 + 0)
       /// </summary>
       /// <param name="input">输了待验证字符串</param>
       /// <returns>如果是返回true,否则返回false</returns>
       public static bool IsNoPositiveInteger(string input)
       {
           return IsRegex(@"^((-/d+)|(0+))$", input);
       }

       /// <summary>
       /// 验证是否浮点数
       /// </summary>
       /// <param name="input">输了待验证字符串</param>
       /// <returns>如果是返回true,否则返回false</returns>
       public static bool IsFloat(string input)
       {
           return IsRegex(@"^(-?/d+)(/./d+)?$", input);
       }

       /// <summary>
       /// 判断是否为double类型
       /// </summary>
       /// <param name="input">被验证字符串。</param>
       /// <returns></returns>
       public static bool IsDouble(string input)
       {
           return IsRegex(@"^([0-9])[0-9]*(/./w*)?$", input);
           //if (input != null)
           //{
           //    return Regex.IsMatch(input.ToString(), @"^([0-9])[0-9]*(/./w*)?$");
           //}
           //return false;
       }

       /// <summary>
       /// 验证是否为16进制字符串
       /// </summary>
       /// </summary>
       /// <param name="input">输了待验证字符串</param>
       /// <returns>如果是返回true,否则返回false</returns>
       public static bool IsHexNumber(string input)
       {
           return IsRegex(@"[^0-9a-fA-F]", input);
       }

       ///// <summary>
       ///// 判断是否16进制编码
       ///// </summary>
       ///// <param name="input">被验证字符串。</param>
       ///// <returns></returns>
       //public static bool IsHexNum(string input)
       //{
       //    input = input.Replace("0X", "").Replace("0x", "");
       //    int n = Int32.Parse(input, System.Globalization.NumberStyles.HexNumber);
       //    return IsNumeric(n.ToString());
       //}

       /// <summary>
       /// 验证字符串是否由字母组成
       /// </summary>
       /// <param name="input">输了待验证字符串</param>
       /// <returns>如果是返回true,否则返回false</returns>
       public static bool IsWord(string input)
       {
           return IsRegex(@"^[A-Za-z]+$", input);
       }

       /// <summary>
       /// 验证是否由数字和字母组成的
       /// </summary>
       /// <param name="input">输了待验证字符串</param>
       /// <returns>如果是返回true,否则返回false</returns>
       public static bool IsNumbericAndWord(string input)
       {
           return IsRegex(@"^[A-Za-z0-9]+$", input);
       }

       /// <summary>
       /// 验证是否为IP地址
       /// </summary>
       /// <param name="input">输了待验证字符串</param>
       /// <returns>如果是返回true,否则返回false</returns>
       public static bool IsIPAddress(string input)
       {
           return IsRegex(@"(?<![/d/.])((25[0-5]|2[0-4]/d|1/d{2}|[1-9]/d|/d)/.){3}(25[0-5]|2[0-4]/d|1/d{2}|[1-9]/d|/d)(?![/d/.])", input);
       }

       /// <summary>
       /// 验证是否url地址
       /// </summary>
       /// <param name="input">输了待验证字符串</param>
       /// <returns>如果是返回true,否则返回false</returns>
       public static bool IsUrl(string input)
       {
           return IsRegex(@"/b(/S+)://(/S+)/b", input);
       }

       /// <summary>
       /// 验证是否EMail地址
       /// </summary>
       /// <param name="input">输了待验证字符串</param>
       /// <returns>如果是返回true,否则返回false</returns>
       public static bool IsEMail(string input)
       {
           return IsRegex(@"^[/w-]+(/.[/w-]+)*@[/w-]+(/.[/w-]+)+$", input);
       }

       /// <summary>
       /// 验证是否为指定格式化的日期格式如( 年-月-日 2009-05-22 )
       /// </summary>
       /// <param name="input">输了待验证字符串</param>
       /// <returns>如果是返回true,否则返回false</returns>
       public static bool IsFormatDate(string input)
       {
           string strTemp = @"^((((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]|1/d|2[0-8]))|(((1[6-9]|[2-9]/d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$";
           //|(/^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/)
           return IsRegex(strTemp, input);
       }

       /// <summary>
       /// 验证是否是电话号码(固定电话如:020-38366688)
       /// </summary>
       /// <param name="input">输了待验证字符串</param>
       /// <returns>如果是返回true,否则返回false</returns>
       public static bool IsPhoneNumber(string input)
       {
          // return IsRegex(@"(d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)?", input);
           return IsRegex(@"(^((/+86)|(86))?-?(/d{3,4}-?)?/d{7,8})$", input);
       }

       /// <summary>
       /// 验证是否中文字符。
       /// </summary>
       /// <param name="input">输了待验证字符串</param>
       /// <returns>如果是返回true,否则返回false</returns>
       public static bool IsMobileNumber(string input)
       {
           return IsRegex(@"^((/+86)|(86))?1(3|5|8)/d{9}$", input);
       }

       /// <summary>
       /// 判断是否为Unicode码
       /// </summary>
       /// <param name="input">被验证字符串。</param>
       /// <returns>返回bool类型</returns>
       public static bool IsUnicode(string input)
       {
           return IsRegex(@"^[/u4E00-/u9FA5/uE815-/uFA29]+$", input);
           //string pattern = @"^[/u4E00-/u9FA5/uE815-/uFA29]+$";
           //return Regex.IsMatch(input, pattern);
       }

       /// <summary>
       /// 验证是否中文字符
       /// </summary>
       /// <param name="input">输了待验证字符串</param>
       /// <returns>如果是返回true,否则返回false</returns>
       public static bool IsChinese(string input)
       {
           return IsRegex(@"^([/u4e00-/u9fa5]+|[a-zA-Z0-9]+)$", input);
       }

       /// <summary>
       ///验证匹配双字节字符(包括汉字在内)
       /// </summary>
       /// <param name="input">输了待验证字符串</param>
       /// <returns>如果是返回true,否则返回false</returns>
       public static bool IsDoubleByte(string input)
       {
           return IsRegex(@"[^/x00-/xff] ", input);
       }

       /// <summary>
       /// 匹配空行的正则表达式
       /// </summary>
       /// <param name="input">输了待验证字符串</param>
       /// <returns>如果是返回true,否则返回false</returns>
       public static bool IsBlankLine(string input)
       {
           return IsRegex(@"/n[/s| ]*/r", input);
       }

       /// <summary>
       /// 验证是否是为HTML标记(还需要改进的地方,如含有空隔或者有属性的时候不行)
       /// </summary>
       /// <param name="input">输了待验证字符串</param>
       /// <returns>如果是返回true,否则返回false</returns>
       public static bool IsHTML(string input)
       {
           return IsRegex(@"<(/S*?)[^>]*>.*?<//1>|<.*? />", input);
       }

       /// <summary>
       /// 判断字符串是否存在操作数据库的安全隐患
       /// </summary>
       /// <param name="input">被验证字符串。</param>
       /// <returns>返回bool类型</returns>
       public static bool IsSafety(string input)
       {
           string str = input.Replace("%20", " ");
           str = Regex.Replace(str, @"/s", " ");
           string pattern = @"select |insert |delete from |count/(|drop table|update |truncate |asc/(|mid/(|char/(|xp_cmdshell|exec master|net localgroup administrators|:|net user|""|/'| or ";
           return !IsRegex(pattern, input);//!Regex.IsMatch(str, pattern, RegexOptions.IgnoreCase);
       }

       /// <summary>
       /// 验证是否为QQ号码
       /// </summary>
       /// <param name="input">输了待验证字符串</param>
       /// <returns>如果是返回true,否则返回false</returns>
       public static bool IsQQNumber(string input)
       {
           return IsRegex(@"[1-9][0-9]{4,}", input);
       }

       /// <summary>
       /// 验证是否邮政编码
       /// </summary>
       /// <param name="input">输了待验证字符串</param>
       /// <returns>如果是返回true,否则返回false</returns>
       public static bool IsPostalCode(string input)
       {
           return IsRegex(@"[1-9]/d{5}(?!/d)", input);
       }


       #region 判断是否为相对地址(虚拟地址)
       /// <summary>
       /// 判断是否为相对地址(虚拟地址)
       /// </summary>
       /// <param name="input">被验证字符串。</param>
       /// <returns>返回bool类型</returns>
       public static bool IsRelativePath(string input)
       {
           if (input == null || input == string.Empty)
           {
               return false;
           }
           if (input.StartsWith("/") || input.StartsWith("?"))
           {
               return false;
           }
           if (Regex.IsMatch(input, @"^/s*[a-zA-Z]{1,10}:.*$"))
           {
               return false;
           }
           return true;
       }
       #endregion

       #region 判断是否为绝对地址(物理地址)
       /// <summary>
       /// 判断是否为绝对地址(物理地址)
       /// </summary>
       /// <param name="input">被验证字符串。</param>
       /// <returns>返回bool类型</returns>
       public static bool IsPhysicalPath(string input)
       {
           return IsRegex(@"^/s*[a-zA-Z]:.*$",input);
           //string pattern = @"^/s*[a-zA-Z]:.*$";
           //return Regex.IsMatch(input, pattern);
       }
       #endregion

       #region 判断用户IP地址段是否在指定数组当中
       /// <summary>
       /// 返回指定IP是否在指定的IP数组所限定的范围内, IP数组内的IP地址可以使用*表示该IP段任意, 例如192.168.1.*
       /// </summary>
       /// <param name="ip">用户输入的IP</param>
       /// <param name="ipArray">指定的IP地址段数组</param>
       /// <returns>返回bool类型</returns>
       public static bool IsInIPArray(string ip, string[] ipArray)
       {
           string[] userip = ip.Split('.');
           for (int j = 0; j < ipArray.Length; j++)
           {
               string[] tmpip = ipArray[j].Split('.');
               int r = 0;
               for (int i = 0; i < tmpip.Length; i++)
               {
                   if (tmpip[i] == "*")
                   {
                       return true;
                   }
                   if (userip.Length > i)
                   {
                       if (tmpip[i] == userip[i])
                       {
                           r++;
                       }
                       else
                       {
                           break;
                       }
                   }
                   else
                   {
                       break;
                   }
               }
               if (r == 4)
               {
                   return true;
               }
           }
           return false;
       }
       #endregion
      
   }
}

原创粉丝点击