C#分享辅助类:正则表达式(RegexHandler)

30 篇文章 1 订阅

名称

方法

验证字符是否在4至12之间

IsValidString

验证后缀名

IsValidPostfix

没有特殊字符

NoneSpecialChar

是否十六进制颜色字符

IsColor

是否数字

IsNum

是不是Int型的

IsInt

验证是否为小数

IsFloat

验证邮箱

IsEmail

HasEmail

验证网址

IsUrl

HasUrl

验证日期

IsDateTime

IsValidDateTime

IsDate

IsTime

是不是中国电话

IsTel

IsMobile

验证中文

IsCn

HasCn

验证IP

IsIP

HasIP

IsValidIP

IsPort

验证身份证是否有效

IsIDCard

IsIDCard18

IsIDCard15

IsValidID

看字符串的长度是不是在限定数之间 一个中文为两个字符

IsLengthStr

邮政编码 6个数字

IsPostCode

验证是不是正常字符 字母,数字,下划线的组合

IsNormalChar

HasSpecialChar

是否有特殊符号

HasSpecialChar

是否是英文域名

IsEnDomain

是否中文域名

IsCnDomain

获取页面编码格式

GetCharSet

获取域名中间的内容

GetDomain

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

namespace Wsfly
{
    /// <summary> 
    /// 各种正则表达式验证
    /// </summary> 
    public class RegexHandler
    {
        #region 验证

        #region 验证字符

        /// <summary>
        /// 验证字符是否在指定长度之间
        /// </summary>
        /// <returns></returns>
        public static bool IsValidString(string value, int minSize, int maxSize)
        {
            return Regex.IsMatch(value, @"^[a-zA-Z0-9_]{" + minSize + "," + maxSize + "}$");
        }

        /// <summary>
        /// 验证后缀名
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        public static bool IsValidPostfix(string value)
        {
            return Regex.IsMatch(value, @"\.(?i:gif|jpg|png|bmp|icon)$",RegexOptions.IgnoreCase);
        }
        /// <summary>
        /// 没有特殊字符
        /// </summary>
        /// <param name="source"></param>
        /// <returns></returns>
        public static bool NoneSpecialChar(string source)
        {
            return Regex.IsMatch(source, "^[a-zA-Z0-9]+$"); 
        }
        /// <summary>
        /// 是否颜色字符
        /// </summary>
        /// <param name="source"></param>
        /// <returns></returns>
        public static bool IsColor(string source)
        {
            return Regex.IsMatch(source, "^#?([a-f]|[A-F]|[0-9]){3}(([a-f]|[A-F]|[0-9]){3})?$");
        }
        #endregion
        
        #region 验证数字
        /// <summary>
        /// 是否数字
        /// </summary>
        /// <param name="source"></param>
        /// <returns></returns>
        public static bool IsNum(object source)
        {
            try
            {
                Regex regex = new Regex(@"^\d+$");

                if (regex.IsMatch(source.ToString()))
                {
                    return true;
                }

                return false;
            }
            catch
            {
                return false;
            }
        }
        /// <summary>
        /// 是不是Int型的
        /// </summary>
        /// <param name="source"></param>
        /// <returns></returns>
        public static bool IsInt(object source)
        {
            try
            {
                Regex regex = new Regex(@"^[+|-]{0,1}\d+$");

                if (regex.Match(source.ToString()).Success)
                {
                    if ((long.Parse(source.ToString()) > 0x7fffffffL) || (long.Parse(source.ToString()) < -2147483648L))
                    {
                        return false;
                    }

                    return true;
                }

                return false;
            }
            catch
            {
                return false;
            }
        }
        /// <summary>
        /// 验证是否为小数
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        public static bool IsFloat(string value)
        {
            return Regex.IsMatch(value, @"^[+|-]?\d*\.?\d*$");
        }
        #endregion

        #region 验证邮箱
        /// <summary>
        /// 验证邮箱
        /// </summary>
        /// <param name="source"></param>
        /// <returns></returns>
        public static bool IsEmail(string source)
        {
            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);
        }
        public static bool HasEmail(string source)
        {
            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);
        }
        #endregion

        #region 验证网址
        /// <summary>
        /// 验证网址
        /// </summary>
        /// <param name="source"></param>
        /// <returns></returns>
        public static bool IsUrl(string source)
        {
            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\&amp;%_\./-~-]*)?$", RegexOptions.IgnoreCase);
        }
        public static bool HasUrl(string source)
        {
            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\&amp;%_\./-~-]*)?", RegexOptions.IgnoreCase);
        }
        #endregion

        #region 验证日期
        /// <summary>
        /// 验证日期
        /// </summary>
        /// <param name="source"></param>
        /// <returns></returns>
        public static bool IsDateTime(string source)
        {
            if (string.IsNullOrWhiteSpace(source)) return false;

            return Regex.IsMatch(source, @"^2\d{3}-(?:0?[1-9]|1[0-2])-(?:0?[1-9]|[1-2]\d|3[0-1])\s(?:0?[1-9]|1\d|2[0-3]):(?:0?[1-9]|[1-5]\d):(?:0?[1-9]|[1-5]\d)$");
        }

        /// <summary>
        /// 判断是否是日期+时间格式
        /// </summary>
        /// <param name="source"></param>
        /// <returns></returns>
        public static bool IsValidDateTime(string source)
        {
            if (string.IsNullOrWhiteSpace(source)) return false;

            return Regex.IsMatch(source, @"^(19|20)\d{2}[/\s\-\.]*(0[1-9]|1[0-2]|[1-9])[/\s\-\.]*(0[1-9]|3[01]|[12][0-9]|[1-9])[\s] *(2[0-3]|[01]?\d)(:[0-5]\d){0,2}$");
        }
        /// <summary>
        /// 是否是日期格式
        /// </summary>
        /// <param name="source"></param>
        /// <returns></returns>
        public static bool IsDate(string source)
        {
            if (string.IsNullOrWhiteSpace(source)) return false;

            return Regex.IsMatch(source, @"^((((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-))$");
        }
        /// <summary>
        /// 是否为时间格式
        /// </summary>
        /// <param name="source"></param>
        /// <returns></returns>
        public static bool IsTime(string source)
        {
            if (string.IsNullOrWhiteSpace(source)) return false;

            return Regex.IsMatch(source, @"^((20|21|22|23|[0-1]?\d):[0-5]?\d:[0-5]?\d)$");
        }
        #endregion
        
        #region 验证电话
        /// <summary>
        /// 是不是中国电话,格式010-85849685/13813800000
        /// </summary>
        /// <param name="source"></param>
        /// <returns></returns>
        public static bool IsTel(string source)
        {
            if (string.IsNullOrWhiteSpace(source)) return false;

            return Regex.IsMatch(source, @"(^(\d{3,4}-)?\d{7,8}$)|(^1[3456789][0-9]{9}$)", RegexOptions.IgnoreCase);
        }
        /// <summary>
        /// 验证手机号
        /// </summary>
        /// <param name="source"></param>
        /// <returns></returns>
        public static bool IsMobile(string source)
        {
            if (string.IsNullOrWhiteSpace(source)) return false;

            return Regex.IsMatch(source, @"^1[3456789][0-9]{9}$", RegexOptions.IgnoreCase);
        }
        #endregion
        
        #region 验证中文
        /**/
        /// <summary>
        /// 中文
        /// </summary>
        /// <param name="source"></param>
        /// <returns></returns>
        public static bool IsCn(string source)
        {
            return Regex.IsMatch(source, @"^[\u4e00-\u9fa5]+$", RegexOptions.IgnoreCase);
        }
        public static bool HasCn(string source)
        {
            return Regex.IsMatch(source, @"[\u4e00-\u9fa5]+", RegexOptions.IgnoreCase);
        }
        #endregion

        #region 验证IP
        /// <summary>
        /// 验证IP
        /// </summary>
        /// <param name="source"></param>
        /// <returns></returns>
        public static bool IsIP(string source)
        {
            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);
        }
        public static bool HasIP(string source)
        {
            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);
        }
        public static bool IsValidIP(string value)
        {
            return Regex.IsMatch(value, @"^(\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])$");
        }
        /// <summary>
        /// 是否端口号
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        public static bool IsPort(string value)
        {
            string pattern = @"^((\d{0,4})|([1-5]\d{1,4})|(6[0-4]\d{1,3})|(65[0-4]\d{1,2})|(655[0-2]\d)|(6553[0-5]))$";

            return Regex.IsMatch(value, pattern);
        }
        #endregion

        #region 验证身份证
        /// <summary>
        /// 验证身份证是否有效
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        public static bool IsIDCard(string Id)
        {
            if (Id.Length == 18)
            {
                bool check = IsIDCard18(Id);
                return check;
            }
            else if (Id.Length == 15)
            {
                bool check = IsIDCard15(Id);
                return check;
            }
            else
            {
                return false;
            }
        }

        private static bool IsIDCard18(string Id)
        {
            long n = 0;
            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)
            {
                return false;//数字验证
            }
            string address = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91";
            if (address.IndexOf(Id.Remove(2)) == -1)
            {
                return false;//省份验证
            }
            string birth = Id.Substring(6, 8).Insert(6, "-").Insert(4, "-");
            DateTime time = new DateTime();
            if (DateTime.TryParse(birth, out time) == false)
            {
                return false;//生日验证
            }
            string[] arrVarifyCode = ("1,0,x,9,8,7,6,5,4,3,2").Split(',');
            string[] Wi = ("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2").Split(',');
            char[] Ai = Id.Remove(17).ToCharArray();
            int sum = 0;
            for (int i = 0; i < 17; i++)
            {
                sum += int.Parse(Wi[i]) * int.Parse(Ai[i].ToString());
            }
            int y = -1;
            Math.DivRem(sum, 11, out y);
            if (arrVarifyCode[y] != Id.Substring(17, 1).ToLower())
            {
                return false;//校验码验证
            }
            return true;//符合GB11643-1999标准
        }

        private static bool IsIDCard15(string Id)
        {
            long n = 0;
            if (long.TryParse(Id, out n) == false || n < Math.Pow(10, 14))
            {
                return false;//数字验证
            }
            string address = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91";
            if (address.IndexOf(Id.Remove(2)) == -1)
            {
                return false;//省份验证
            }
            string birth = Id.Substring(6, 6).Insert(4, "-").Insert(2, "-");
            DateTime time = new DateTime();
            if (DateTime.TryParse(birth, out time) == false)
            {
                return false;//生日验证
            }
            return true;//符合15位身份证标准
        }

        /// <summary>
        /// 判断身份证是否合法
        /// </summary>
        /// <param name="str">身份证号码</param>
        /// <returns>bool</returns>
        public static bool IsValidID(string id)
        {
            bool error = true;

            string reg = @"^(\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$";    //设置正则表达式        
            Match m = Regex.Match(id, reg);                         //判断并得到结果

            if (!m.Success)
            {//判断如果不符合正则表达式规则设置error为false;
                error = false; ;
            }

            return error;
        }
        #endregion

        #region 看字符串的长度是不是在限定数之间 一个中文为两个字符
        /**/
        /// <summary>
        /// 看字符串的长度是不是在限定数之间 一个中文为两个字符
        /// </summary>
        /// <param name="source">字符串</param>
        /// <param name="begin">大于等于</param>
        /// <param name="end">小于等于</param>
        /// <returns></returns>
        public static bool IsLengthStr(string source, int begin, int end)
        {
            int length = Regex.Replace(source, @"[^\x00-\xff]", "OK").Length;
            if ((length <= begin) && (length >= end))
            {
                return false;
            }
            return true;
        }
        #endregion

        #region 邮政编码 6个数字
        /**/
        /// <summary>
        /// 邮政编码 6个数字
        /// </summary>
        /// <param name="source"></param>
        /// <returns></returns>
        public static bool IsPostCode(string source)
        {
            return Regex.IsMatch(source, @"^\d{6}$", RegexOptions.IgnoreCase);
        }
        #endregion
        
        #region 验证是不是正常字符 字母,数字,下划线的组合
        /**/
        /// <summary>
        /// 验证是不是正常字符 字母,数字,下划线的组合
        /// </summary>
        /// <param name="source"></param>
        /// <returns></returns>
        public static bool IsNormalChar(string source)
        {
            if (HasCn(source)) return false;

            return Regex.IsMatch(source, @"[\w\d_]+", RegexOptions.IgnoreCase);
        }
        /// <summary>
        /// 是否有特殊符号
        /// </summary>
        /// <param name="domain"></param>
        /// <returns></returns>
        public static bool HasSpecialChar(string domain)
        {
            if (HasCn(domain)) return false;

            string pattern = "[`~!@#$%^&*()+=|{}':;',//\"\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]";
            Regex reg = new Regex(pattern);

            return reg.IsMatch(domain);
        }
        #endregion

        #region 验证域名
        /// <summary>
        /// 是否是英文域名
        /// 例:google.com
        /// </summary>
        /// <param name="domain"></param>
        /// <returns></returns>
        public static bool IsEnDomain(string domain)
        {
            string pattern = @"^[a-zA-Z0-9][-a-zA-Z0-9]{1,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?";

            Regex reg = new Regex(pattern);

            return reg.IsMatch(domain);
        }
        /// <summary>
        /// 是否中文域名
        /// </summary>
        /// <param name="domain"></param>
        /// <returns></returns>
        public static bool IsCnDomain(string domain)
        {
            string pattern = @"[\u4e00-\u9fa5][a-zA-Z0-9][-a-zA-Z0-9]{1,20}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?";

            Regex reg = new Regex(pattern);

            return reg.IsMatch(domain);
        }
        
        #endregion

        #endregion

        #region 获取

        /// <summary>
        /// 获取页面编码格式
        /// </summary>
        /// <param name="source"></param>
        public static string GetCharSet(string source)
        {
            Match reg = Regex.Match(source, "<meta([^<]*)charset=([^<]*)\"", RegexOptions.IgnoreCase | RegexOptions.Multiline);

            return reg.Groups[2].Value.Trim();
        }
        /// <summary>
        /// 获取域名中间的内容
        /// </summary>
        /// <param name="domain"></param>
        /// <returns></returns>
        public static string GetDomain(string domain)
        {
            Regex reg = new Regex(@"(www.)?(?<value>[a-zA-Z0-9][-a-zA-Z0-9]{1,62})", RegexOptions.IgnoreCase);

            domain = reg.Match(domain).Groups["value"].Value.ToString().Trim();

            return domain;
        }
        #endregion
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MOZ-Soft

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值