前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >c#常用正则表达式,验证邮箱,Url,电话号码等

c#常用正则表达式,验证邮箱,Url,电话号码等

原创
作者头像
大师级码师
修改于 2021-10-27 07:40:53
修改于 2021-10-27 07:40:53
50900
代码可运行
举报
文章被收录于专栏:大师级码师大师级码师
运行总次数:0
代码可运行

正则表达式的一些常用的功能集成至该类中

[C#]代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class RegexUtil
{
    private RegexUtil() { }

    private static RegexUtil instance = null;
    /// <summary>
    /// 静态实例化单体模式
    /// 保证应用程序操作某一全局对象,让其保持一致而产生的对象
    /// </summary>
    /// <returns></returns>
    public static RegexUtil GetInstance()
    {
        if (RegexUtil.instance == null)
        {
            RegexUtil.instance = new RegexUtil();
        }
        return RegexUtil.instance;
    }

    /// <summary>
    /// 判断输入的字符串只包含汉字
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    public static bool IsChineseCh(string input)
    {
        return IsMatch(@"^[\u4e00-\u9fa5]+$", 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}$";
        return IsMatch(pattern, input);            
    }

    /// <summary>
    /// 判断输入的字符串是否是一个合法的手机号
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    public static bool IsMobilePhone(string input)
    {
        return IsMatch(@"^13\\d{9}$", input);
    }

    /// <summary>
    /// 判断输入的字符串只包含数字
    /// 可以匹配整数和浮点数
    /// ^-?\d+$|^(-?\d+)(\.\d+)?$
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    public static bool IsNumber(string input)
    {
        string pattern = "^-?\\d+$|^(-?\\d+)(\\.\\d+)?$";
        return IsMatch(pattern, input);            
    }

    /// <summary>
    /// 匹配非负整数
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    public static bool IsNotNagtive(string input)
    {
        return IsMatch(@"^\d+$", input);
    }
    /// <summary>
    /// 匹配正整数
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    public static bool IsUint(string input)
    {
        return IsMatch(@"^[0-9]*[1-9][0-9]*$", input);            
    }

    /// <summary>
    /// 判断输入的字符串字包含英文字母
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    public static bool IsEnglisCh(string input)
    {
        return IsMatch(@"^[A-Za-z]+$", 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})(\]?)$";
        return IsMatch(pattern, input);            
    }

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

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

    /// <summary>
    /// 判断输入的字符串是否是表示一个IP地址
    /// </summary>
    /// <param name="input">被比较的字符串</param>
    /// <returns>是IP地址则为True</returns>
    public static bool IsIPv4(string input)
    {
        string[] IPs = input.Split('.');

        for (int i = 0; i < IPs.Length; i++)
        {
            if (!IsMatch(@"^\d+$",IPs[i]))
            {
                return false;
            }
            if (Convert.ToUInt16(IPs[i]) > 255)
            {
                return false;
            }
        }
        return true;
    }

    /// <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 = RegexUtil.GetStringCount(input, "::");
        if (count > 1)
        {
            return false;
        }
        else if (count == 0)
        {
            pattern = @"^([\da-f]{1,4}:){7}[\da-f]{1,4}$";
            return IsMatch(pattern, input);
        }
        else
        {
            pattern = @"^([\da-f]{1,4}:){0,5}::([\da-f]{1,4}:){0,5}[\da-f]{1,4}$";
            return IsMatch(pattern, input);
        }
    }

    #region 正则的通用方法
    /// <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)
    {
        if (input == null || input == "") return false;
        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);
    }

    /* *******************************************************************
     * 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;
        }

    }
    /// <summary>
    /// 根据结构体RegularFormula,返回具体正则表达式
    /// </summary>
    /// <param name="RegulatFormula"></param>
    /// <returns></returns>
    private static string GetRegularFormula(string RegulatFormula)
    {
        string str = "";
        if (RegulatFormula.ToUpper().IndexOf("RegularFormula".ToUpper()) > -1)
        {
            RegularFormula formula = new RegularFormula();
            Type type = typeof(RegularFormula);
            foreach (System.Reflection.FieldInfo info in type.GetFields())
            {
                if (("RegularFormula." + info.Name).ToUpper() == RegulatFormula.ToUpper())
                {
                    str = info.GetValue(formula).ToString();
                }
            }
            return str;
        }
        return RegulatFormula;
    }

    #endregion
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一口气复习完 Vue3 相关基础知识点
看完你就基本可以上手搞开发了,本文适合Vue初学者,或者Vue2迁移者,当然还是建议Vue3官网完全过一遍。不适合精通原理,源码的大佬们。
前端达人
2021/09/09
2.3K0
一口气复习完 Vue3 相关基础知识点
学会这几个API,vue3直接上手
vue2开发过项目的,想直接上手vue3很快,几个API熟悉了就够了,其它的特性在使用vue3的过程慢慢去了解。任何在熟悉了使用之后再去研究一些API的原理,慢慢就能把vue3掌握。
wade
2022/03/28
7080
Vue3学习笔记
setup等同于原data,通过reactive定义变量病赋值到data,再return出去,就可以在template用双大括号使用,计算特性:doublecounter的定义,注意需要import computed
kif
2023/03/10
1.2K0
【Vue3+TypeScript】CRM系统项目搭建之 — 关于 VUE3 语法新变化
vite 是新一代前端构建工具,官网地址:https://vitejs.cn,vite的优势如下:
HelloWorldZ
2024/03/20
5380
【Vue3+TypeScript】CRM系统项目搭建之 — 关于 VUE3 语法新变化
vue3简易入门剖析
,发音同 “veet”)是一种新型前端构建工具,能够显著提升前端开发体验。它主要由两部分组成:
张哥编程
2024/12/13
4210
Vue3 TypeScript 使用教程 - 实战 Vue3 element-plus 开发「待办清单」
本文完整版:《Vue3 TypeScript 使用教程 - 实战 Vue3 element-plus 开发「待办清单」》
蒋川@卡拉云
2022/05/27
2.1K0
Vue3 TypeScript 使用教程 - 实战 Vue3 element-plus 开发「待办清单」
一文让你30分钟快速掌握Vue3
https://juejin.im/post/6887359442354962445
ConardLi
2020/11/03
1.4K0
一文让你30分钟快速掌握Vue3
Vue2到Vue3,重学这5个常用的API
距离Vue3发布已经过去一年多时间了,从Vue2到Vue3是一个不小的升级,包括周边生态等。
玄姐谈AGI
2023/01/10
9100
Vue2到Vue3,重学这5个常用的API
前端系列14集-Vue3-setup
页面浏览量(Page View,PV)和访客数(Unique Visitors,UV)
达达前端
2023/10/08
5160
前端系列14集-Vue3-setup
Vue3 中有哪些值得深究的知识点?
众所周知,前端技术一直更新很快,这不 vue3 也问世这么久了,今天就来给大家分享下vue3中值得注意的知识点。喜欢的话建议收藏,点个关注!
玖柒的小窝
2021/12/07
1.1K0
Vue3 中有哪些值得深究的知识点?
Vue3 的 7 种和 Vue2 的 12 种组件通信,值得收藏
如果父组件是混合写法,子组件纯 Vue3 写法的话,是接收不到父组件里 data 的属性,只能接收到父组件里 setup 函数里传的属性。
Swift社区
2024/10/10
3030
Vue3 的 7 种和 Vue2 的 12 种组件通信,值得收藏
Vue3 学习笔记 —— (一)深入理解组合式 API
Vue3 是向下兼容 Vue2 API 的,但是 Vue3 中提供了一种全新的 Composition API
Gorit
2021/12/08
7530
Vue3 学习笔记 —— (一)深入理解组合式 API
Vue3 + TypeScript 开发实践总结
迟来的Vue3文章,其实早在今年3月份时就把Vue3过了一遍。 在去年年末又把 TypeScript 重新学了一遍,为了上Vue3 的车,更好的开车。 在上家公司4月份时,上级领导分配了一个内部的 党务系统开发 ,这个系统前端是由我一个人来开发,功能和需求也不怎么复杂的一个B 端 系统,直接上的 Vue3 + TypeScript + Element Plus 开发的,开发两周到最后的上线,期间也遇到很多小坑,很多无处可查,慢慢琢磨最后还是克服了。
程序员海军
2021/07/09
1.8K0
Vue3 + TypeScript 开发实践总结
vue3 setup语法糖
和选项api的最大不同就是新增了 setup()。我们要处理的逻辑都放到了setup()中
用户4793865
2023/01/12
1.2K0
vue3 setup语法糖
Vue3组件通信相关的知识梳理
我们知道vue3的Composition Api是它几个最大亮点之一,所以下文都是在setup中演示代码的实现。后面会以开发几个简单form组件为例子来演示。
前端达人
2021/08/10
3.6K0
Vue3组件通信相关的知识梳理
Vue3从入门到精通(二)
在Vue3中,侦听器的使用方式与Vue2相同,可以使用watch选项或$watch方法来创建侦听器。不同之处在于,Vue3中取消了immediate选项,同时提供了新的选项和API。
明志德道
2023/10/21
4710
Vue3, setup语法糖、Composition API全方位解读
支持绑定多个v-model,v-model 是 v-model:modelValue 的简写
yyds2026
2022/09/26
3.2K0
让你30分钟快速掌握vue 3
经过了漫长的迭代,Vue 3.0终于在上2020-09-18发布了,带了翻天覆地的变化,使用了Typescript 进行了大规模的重构,带来了Composition API RFC版本,类似React Hook 一样的写Vue,可以自定义自己的hook ,让使用者更加的灵活,接下来总结一下vue 3.0 带来的部分新特性。
前端开发博客
2020/11/04
2.4K0
vue3中可以帮助你早点下班的9个开发技巧!
vue3也发布很长时候了,官方也将默认版本切换为vue3,而且也出现了完善的中文文档,不知同志们是否已经使用了了呢?
用户7413032
2022/04/01
1.1K0
vue3中可以帮助你早点下班的9个开发技巧!
关于 Vue3 + setup + ts 使用技巧的总结
ref 一般用于基本的数据类型,比如 string,boolean ,reactive 一般用于对象 ref 的地方其实也是调用的 reactive 实现的。
前端达人
2023/08/31
1.1K0
关于 Vue3 + setup + ts 使用技巧的总结
相关推荐
一口气复习完 Vue3 相关基础知识点
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档