正则表达式

相信大家在写判断用户输入的时候,都很痛苦,不仅逻辑乱,而且特别影响系统的性能,那么怎么办呢?就用正则表达式,优点是简洁,高效。

为什么要用正则表达式?

如果你要判断用户输入的qq号是否合法,常规的C#代码大概应该这样写:

1、首先判断是否都为数字
2、然后首位是否为0
3、最后判断是否是5到10位之间

用C#代码(不使用正则表达式)


/// <summary>
        /// 判断QQ号是否合法
        /// </summary>
        /// <param name="QQ">要检测的QQ号</param>
        /// <returns></returns>
        public static bool Check(string QQ)
        {
            //定义变量,用来接收判断是否是数字的结果
            bool isNumber = true;
            //判断是否全部为数字
            for (int i = 0; i < QQ.Length; i++)
            {
                if (QQ[i]>='0'&& QQ[i]<='9')
                {
                    isNumber = false;
                    break;
                }
            }
            //判断首位是否为0
            bool isZeroStart = !(QQ[0] == '0');
            //判断长度是否在5到10之间
            bool length = QQ.Length >= 5 && QQ.Length <= 10;
            //返回结果
            return isNumber && isZeroStart && length;
        }

C#代码(使用正则表达式)

/// <summary>
        /// 判断QQ号是否合法
        /// </summary>
        /// <param name="QQ"></param>
        /// <returns></returns>
        public static bool Check(string QQ)
        {
            //用正则表达式来写
            bool resule= Regex.IsMatch(QQ, "^[1-9]\\d{4,9}$");
            //返回结果
            return resule;
        }

是不是感觉正则表达式很简单,其实没错,就是你想的这样!

注意事项:

1、首先在C#中,使用正则表达式需要导入命名空间
using System.Text.RegularExpressions;//正则表达式的命名空间

2、其次这个正则表达式是非常坑的,为啥坑呢?因为它属于一个字符串,字符串是没有任何的语法提示的。

3、然后正则表达式写的时候要注意,因为如果写错了,系统会直接崩掉,容错率较差。
4、正则表达式对于每一种语言,它的语法是相同的,例如:无论是C#,java,C还是任何一种语言都有自己的语法,但是像正则表达式,它的语法是通用的,换句话说,如果你忘记了语法,那么你就可以通过百度百科中很容易找到相应的语法。

下面这个表格中,记录我们正则表达式中常用的语法,先看一看,看不懂没关系,耐心看下去,下面有例子等着你。

符号含义
^用来匹配一个字符串的开头 C#中必须加上 但是java默认加上去
$用来匹配一个字符串的结束
[]匹配一位字符,这一位字符可以是这个括号中的任何一个
[1-9]这一位字符可取的范围是1到9
[a-z]这一位字符可取的范围是a到z
[^1-9]这一位字符可以是[1,9]以外的任何字符
+前面的一位字符连续出现了1次或多次
*前面的一位字符连续出现了0次或多次
?前面的一位字符连续出现了0次或1次
{m}前面的一位字符连续出现了m次
{m,}前面的一位字符最少连续出现了m次
{,n}前面的一位字符最多连续出现了n次
{m,n}前面的一位字符出现了[m,n]次
\d表示[0,9]
\w表示[a,z]&[A,Z]
\D表示[^0,9]
.通配符,可以匹配任意字符
()分组

举例:

1、判断手机号是否合法:

1、首先手机号是十一位,并且每一位都是数字

2、其次手机号是以1开头,并且在我印象里,手机号第二位只有3、4、5、7、8

        /// <summary>
        /// 判断手机号是否合法
        /// </summary>
        /// <param name="number">要判断的手机号</param>
        /// <returns></returns>
        public static bool CheckPhoneNumber(string number)
        {
            //正则表达式
            string pattern = "^1[34578]\\d{9}$";//确定语法规则
            return Regex.IsMatch(number, pattern);//判断语法是否相同,如果相同返回True,否则返回False
        }

判断邮箱是否合法:

1、首先邮箱中肯定有一个'@'字符

2、其次邮箱中肯定是以".com"结束

3、邮箱可以是以数字、大小写字母、_、!等开头

        /// <summary>
        /// 判断邮箱是否合法
        /// </summary>
        /// <param name="email">要检测的邮箱</param>
        /// <returns></returns>
         public static bool CheckEmail(string email)
        {
            string patten = "^[0-9a-zA-Z_\\.]+@[0-9a-zA-Z]+\\.com$";
            return Regex.IsMatch(email, patten);
        }

Replace方法的使用

这个方法可以去掉字符串中的某类的字符,举个例子:把下列字符串中的空格变换成逗号。

string str = "James  Curry                    Rose     Paul   Harden     Durant ";
        /// <summary>
        /// 把字符串的空格转化为逗号
        /// </summary>
        /// <param name="str">要转换的字符</param>
        /// <returns></returns>
        public static string FixName(string str)
        {
            string pattern = " {2,}";//正则表达式语法,含义是连续两个或两个以上的空格
            //返回字符串,第一个参数是要判断的字符,第二个参数是判断的规则,第三个参数是替换的目标字符
            return Regex.Replace(str, pattern, ",");
            
        }

1、首先该方法是Regex类的一个静态方法,调用该方法的时候,只需要用类名.方法名

2、其次该方法有三个参数:第一个参数是要判断的字符,第二个参数是判断的规则,第三个参数是替换的目标字符

屏蔽手机号的中间四位

        /// <summary>
        /// 判断电话是否合法
        /// </summary>
        /// <param name="phone">你要检测的电话号码</param>
        /// <returns></returns>
        public static string CheckPhone(string phone)
        {
            //正则表达式,通过分组
            string pattern = "^(1[34578]\\d)(\\d{4})(\\d{4})$";
            //获取到一个匹配的结点
            Match match = Regex.Match(phone, pattern);
            //获得所有的分组
            GroupCollection groups = match.Groups;
            string group1 = groups[1].Value;
            string group3 = groups[3].Value;
            //将这些分组连接起来
            return group1+"****"+group3;
        }

感谢您的阅读,希望我的分享对你有所帮助,加油!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值