using System;
using System.Text.RegularExpressions;
namespace MetarCommonSupport
{
/// <summary>
/// 通过Framwork类库中的Regex类实现了一些特殊功能数据检查
/// </summary>
public class MetarnetRegex
{
  
   private static MetarnetRegex instance = null;
   public static MetarnetRegex GetInstance()
   {
    if(MetarnetRegex.instance == null)
    {
     MetarnetRegex.instance = new MetarnetRegex();
    }
    return MetarnetRegex.instance;
   }
   private MetarnetRegex()
   {
   }
   /// <summary>
   /// 判断输入的字符串只包含汉字
   /// </summary>
   /// <param name="input"></param>
   /// <returns></returns>
   public static bool IsChineseCh(string input)
   {
    Regex regex = new Regex("^[/u4e00-/u9fa5]+$");
    return regex.IsMatch(input);
   }

/// <summary>
   /// 匹配3位或4位区号的电话号码,其中区号可以用小括号括起来,
   /// 也可以不用,区号与本地号间可以用连字号或空格间隔,
   /// 也可以没有间隔
   /// /(0/d{2}/)[- ]?/d{8}|0/d{2}[- ]?/d{8}|/(0/d{3}/)[- ]?/d{7}|0/d{3}[- ]?/d{7}
   /// </summary>
   /// <param name="input"></param>
   /// <returns></returns>
   public static bool IsPhone(string input)
   {
    string pattern = "^//(0//d{2}//)[- ]?//d{8}$|^0//d{2}[- ]?//d{8}$|^//(0//d{3}//)[- ]?//d{7}$|^0//d{3}[- ]?//d{7}$";
    Regex regex = new Regex(pattern);
    return regex.IsMatch(input);
   }
   /// <summary>
   /// 判断输入的字符串是否是一个合法的手机号
   /// </summary>
   /// <param name="input"></param>
   /// <returns></returns>
   public static bool IsMobilePhone(string input)
   {
    Regex regex = new Regex("^13//d{9}$");
    return regex.IsMatch(input);
   
   }

/// <summary>
   /// 判断输入的字符串只包含数字
   /// 可以匹配整数和浮点数
   /// ^-?/d+$|^(-?/d+)(/./d+)?$
   /// </summary>
   /// <param name="input"></param>
   /// <returns></returns>
   public static bool IsNumber(string input)
   {
    string pattern = "^-?//d+$|^(-?//d+)( //.//d+)?$ ";
    Regex regex = new Regex(pattern);
    return regex.IsMatch(input);
   }
   /// <summary>
   /// 匹配非负整数
   ///
   /// </summary>
   /// <param name="input"></param>
   /// <returns></returns>
   public static bool IsNotNagtive(string input)
   {
    Regex regex = new Regex(@"^/d+$");
    return regex.IsMatch(input);
   }
   /// <summary>
   /// 匹配正整数
   /// </summary>
   /// <param name="input"></param>
   /// <returns></returns>
   public static bool IsUint(string input)
   {
    Regex regex = new Regex("^[0-9]*[1-9][0-9]*$");
    return regex.IsMatch(input);
   }
   /// <summary>
   /// 判断输入的字符串字包含英文字母
   /// </summary>
   /// <param name="input"></param>
   /// <returns></returns>
   public static bool IsEnglisCh(string input)
   {
    Regex regex = new Regex("^[A-Za-z]+$");
    return regex.IsMatch(input);
   }

/// <summary>
   /// 判断输入的字符串是否是一个合法的Email地址
   /// </summary>
   /// <param name="input"></param>
   /// <returns></returns>
   public static bool IsEmail(string input)
   {
    string pattern = @"^([/w-/.]+)@((/[[0-9]{1,3}/.[0-9]{1,3}/.[0-9]{1,3}/.)|(([/w-]+/.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(/]?)$";
    Regex regex = new Regex(pattern);
    return regex.IsMatch(input);
   }

/// <summary>
   /// 判断输入的字符串是否只包含数字和英文字母
   /// </summary>
   /// <param name="input"></param>
   /// <returns></returns>
   public static bool IsNumAndEnCh(string input)
   {
    string pattern = @"^[A-Za-z0-9]+$";
    Regex regex = new Regex(pattern);
    return regex.IsMatch(input);
   }

/// <summary>
   /// 判断输入的字符串是否是一个超链接
   /// </summary>
   /// <param name="input"></param>
   /// <returns></returns>
   public static bool IsURL(string input)
   {
    //string pattern = @" http://([/w-]+/.)+[/w-]+(/[/w - ./?%&=]*)?";
    string pattern = @"^[a-zA-Z]+://(/w+(-/w+)*)(/.(/w+(-/w+)*))*(/?/S*)?$";
    Regex regex = new Regex(pattern);
    return regex.IsMatch(input);
   }

/// <summary>
   /// 判断输入的字符串是否是表示一个IP地址
   /// </summary>
   /// <param name="input">被比较的字符串</param>
   /// <returns>是IP地址则为True</returns>
   public static bool IsIPv4(string input)
   {
   
    string[] IPs = input.Split('.');
    Regex regex = new Regex(@"^/d+$");
    for(int i = 0; i<IPs.Length; i++)
    {
     if(!regex.IsMatch(IPs[i]))
     {
      return false;
     }
     if(Convert.ToUInt16(IPs[i]) > 255)
     {
      return false;
     }
    }
    return true;
   }

/// <summary>
   /// 计算字符串的字符长度,一个汉字字符将被计算为两个字符
   /// </summary>
   /// <param name="input">需要计算的字符串</param>
   /// <returns>返回字符串的长度</returns>
   public static int GetCount(string input)
   {
    return Regex.Replace(input,@"[/u4e00-/u9fa5/g]","aa").Length;
   }

/// <summary>
   /// 调用Regex中IsMatch函数实现一般的正则表达式匹配
   /// </summary>
   /// <param name="pattern">要匹配的正则表达式模式。</param>
   /// <param name="input">要搜索匹配项的字符串</param>
   /// <returns>如果正则表达式找到匹配项,则为 true;否则,为 false。</returns>
   public static bool IsMatch(string pattern, string input)
   {
    Regex regex = new Regex(pattern);
    return regex.IsMatch(input);
   }
  
   /// <summary>
   /// 从输入字符串中的第一个字符开始,用替换字符串替换指定的正则表达式模式的所有匹配项。
   /// </summary>
   /// <param name="pattern">模式字符串</param>
   /// <param name="input">输入字符串</param>
   /// <param name="replacement">用于替换的字符串</param>
   /// <returns>返回被替换后的结果</returns>
   public static string Replace(string pattern, string input, string replacement)
   {
    Regex regex = new Regex(pattern);
    return regex.Replace(input,replacement);
   }

/// <summary>
   /// 在由正则表达式模式定义的位置拆分输入字符串。
   /// </summary>
   /// <param name="pattern">模式字符串</param>
   /// <param name="input">输入字符串</param>
   /// <returns></returns>
   public static string[] Split(string pattern, string input)
   {
    Regex regex = new Regex(pattern);
    return regex.Split(input);
   }
   /// <summary>
   /// 判断输入的字符串是否是合法的IPV6 地址
   /// </summary>
   /// <param name="input"></param>
   /// <returns></returns>
   public static bool IsIPV6(string input)
   {
    string pattern = "";
    string temp = input;
    string[] strs = temp.Split(':');
    if(strs.Length > 8)
    {
     return false;
    }
    int count = MetarnetRegex.GetStringCount(input,"::");
    if(count>1)
    {
     return false;
    }
    else if(count == 0)
    {
     pattern = @"^([/da-f]{1,4}:){7}[/da-f]{1,4}$";

Regex regex = new Regex(pattern);
     return regex.IsMatch(input);
    }
    else
    {
     pattern = @"^([/da-f]{1,4}:){0,5}::([/da-f]{1,4}:){0,5}[/da-f]{1,4}$";
     Regex regex1 = new Regex(pattern);
     return regex1.IsMatch(input);
    }

}
   /* *******************************************************************
   * 1、通过“:”来分割字符串看得到的字符串数组长度是否小于等于8
   * 2、判断输入的IPV6字符串中是否有“::”。
   * 3、如果没有“::”采用 ^([/da-f]{1,4}:){7}[/da-f]{1,4}$ 来判断
   * 4、如果有“::” ,判断"::"是否止出现一次
   * 5、如果出现一次以上 返回false
   * 6、^([/da-f]{1,4}:){0,5}::([/da-f]{1,4}:){0,5}[/da-f]{1,4}$
   * ******************************************************************/
   /// <summary>
   /// 判断字符串compare 在 input字符串中出现的次数
   /// </summary>
   /// <param name="input">源字符串</param>
   /// <param name="compare">用于比较的字符串</param>
   /// <returns>字符串compare 在 input字符串中出现的次数</returns>
   private static int GetStringCount(string input, string compare)
   {
    int index = input.IndexOf(compare);
    if(index != -1)
    {
     return 1 + GetStringCount(input.Substring(index + compare.Length),compare);
    }
    else
    {
     return 0;
    }

}
}
}

C# Regex类详解相关推荐

  1. matcher java_Java Matcher类详解

    首页 > 基础教程 > 正则表达式 > Matcher类 Java Matcher类详解 Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查, ...

  2. Java正则表达式Pattern和Matcher类详解

    转载自:http://blog.csdn.net/yin380697242/article/details/52049999 概述 Pattern类的作用在于编译正则表达式后创建一个匹配模式. Mat ...

  3. java之Pattern类详解

    在JDK 1.4中,Java增加了对正则表达式的支持. java与正则相关的工具主要在java.util.regex包中:此包中主要有两个类:Pattern.Matcher. Pattern  声明: ...

  4. Java Pattern类详解

    Java Pattern类详解 Pattern在java.util.regex包中,是正则表达式的编译表示形式,此类的实例是不可变的,可供多个并发线程安全使用. 定义 public final cla ...

  5. OpenCV Mat类详解和用法(官网原文)

    参考文章:OpenCV Mat类详解和用法 我马克一下,日后更 官网原文链接:https://docs.opencv.org/3.2.0/d6/d6d/tutorial_mat_the_basic_i ...

  6. 转载:c+string类详解

    C++ string 类详解 </h1><div class="clear"></div><div class="postBod ...

  7. JDBC学习笔记02【ResultSet类详解、JDBC登录案例练习、PreparedStatement类详解】

    黑马程序员-JDBC文档(腾讯微云)JDBC笔记.pdf:https://share.weiyun.com/Kxy7LmRm JDBC学习笔记01[JDBC快速入门.JDBC各个类详解.JDBC之CR ...

  8. JDBC学习笔记01【JDBC快速入门、JDBC各个类详解、JDBC之CRUD练习】

    黑马程序员-JDBC文档(腾讯微云)JDBC笔记.pdf:https://share.weiyun.com/Kxy7LmRm JDBC学习笔记01[JDBC快速入门.JDBC各个类详解.JDBC之CR ...

  9. Android复习14【高级编程:推荐网址、抠图片上的某一角下来、Bitmap引起的OOM问题、三个绘图工具类详解、画线条、Canvas API详解(平移、旋转、缩放、倾斜)、矩阵详解】

    目   录 推荐网址 抠图片上的某一角下来 8.2.2 Bitmap引起的OOM问题 8.3.1 三个绘图工具类详解 画线条 8.3.16 Canvas API详解(Part 1) 1.transla ...

最新文章

  1. 手把手教 | 深度学习库PyTorch(附代码)
  2. Ubuntu 12.10 下 详细Netbeans安装配置篇 (下)
  3. docker挂载目录原理
  4. Dataset:数据集集合(综合性)——机器学习、深度学习算法中常用数据集大集合(建议收藏,持续更新)
  5. CentOS 7.6安装使用Ansible(二):Ansible常用的27个模块
  6. mysql 随机update_MySQL随机查询数据与随机更新数据
  7. 分布式的客户端-服务器结构_MMORPG游戏服务器技术选型参考
  8. WKWebview加载本地图片时出现路径问题
  9. 第 1 章 多线程基础介绍
  10. 人本原理内涵_叶澜教育学原理课后答案资料配套题库考研真题精选课后习题章节题库...
  11. 笔记-JavaWeb学习之旅4
  12. c语言 指针_C语言野指针以及非法内存操作
  13. 驱动调试助手V2.9
  14. Tensorflow笔记:MNIST数据集输出手写数字识别准确率
  15. LimeSDR 中文教程 (一)
  16. Redis持久化策略AOF、RDB详解及源码分析
  17. 【学习笔记】【MAC】sdk自带uiautomatorviewer启动报错问题解决
  18. 求一元二次方程根(含虚根)
  19. 数据结构-队列-“先进先出”的数据结构
  20. 哥,8年不见,您啥时候回来?度娘想死您了!

热门文章

  1. if __name__ == __main__:什么意思_好冷的Python if __name__==__main__是啥东东
  2. oracle导入初始数据死机,Sqoop导入Oracle数据至hive卡死在hive.HiveImport: Connecting to jdbc:hive2不执行...
  3. matlab算线性方程解,MATLAB计算方法3解线性方程组计算解法.pptx
  4. 白光干涉衍射实验的计算机仿真,白光干涉_衍射实验的计算机仿真_蓝海江.pdf
  5. 自由轴法 matlab,一种自由轴法RLC测量电路设计
  6. vivado不识别HLS生成的IP解决方法
  7. php板块模板,有没有办法制作模板,但没有在板块php渲染它
  8. 逻辑java练习_逻辑结构常见练习 Java_Note
  9. springboot 获取客户端ip_JAVA如何获取客户端IP地址和MAC地址
  10. python 2x和python 3x的区别_python2x和3x区别