正则表达式

简介: 我们在本地计算机中搜索文件时,经常会用“ * ”和“ ? ”来代替任意长度的字符和任意单个的字符;在搜索引擎中用" | "来代替或者的关系,双引号“”之间表示必须包含整段关键字等等。

      前言


      我们在本地计算机中搜索文件时,经常会用“ * ”和“ ? ”来代替任意长度的字符和任意单个的字符;在搜索引擎中用" | "来代替或者的关系,双引号“”之间表示必须包含整段关键字等等。

8.png

    再来看一个SQL语句:select * from T_Employee where eName like '胡%',即查询所有姓“胡”的员工,执行结果如下:


9.png

    这些都涉及到了字符匹配的问题。


      正则表达式是什么 ?



      和上面的“*”、“?” 等符号相似,正则表达式也是用来描述符合某些规则的字符串格式的工具,虽然ASP.NET、JQuery等提供了验证控件,不过正则表达式制定的规范更加复杂也更加严谨,通常用来匹配、处理字符串。


      比如:


      规定注册的用户名长度为6到18位,只能由下划线、数字和字母组成,正则表达式为: /^[a-z0-9_-]{6,18}$/


      规定真实姓名必须为中文,正则表达式为:/^[\u4e00-\u9fa5]+$/


      规定输入必须为正确的邮箱格式,正则表达式为:/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/


      ……


      这些对字符串的“约束”,都可以用正则表达式来描述。      


      看到这里您肯定会觉得眼花缭乱,对正则表达式产生反感,不要怕,老师常说,记是记不住的,所以我们只需要在需要用到的时候能找到就行,我想肯定没有人去花那么多功夫去背这些东西。当然,了解一些出现频率较高的元字符(正则表达式中的元素)可以帮助我们较快地“读懂”那些正则表达式。


常用的元字符及其含义:

10.png11.png

这里只记录几个常用的现成的正则表达式(一般情况做个验证应该够用了),注意:千万不要记!用的时候再来找就行了!


12.png13.png14.png


      如何应用正则表达式 ?


      对正则表达式有所了解之后,该如何在我们的程序中应用?所有环境下都能应用正则表达式吗?

      搜索时会发现,在相关搜索中会出现JS正则表达式、PHP正则表达式、Python正则表达式等等,由此看出,正则表达式的应用还是很广的,任何语言环境都“认识”它。


15.png

      不过,在每种语言环境下,对正则表达式的应用都是有所差异的(毕竟每种环境调用的底层函数都不一样),比如我们.NET中常用Regex和Match等类来应用表达式,在JS中可以直接用String对象的test、match等方法应用,在Java中常用Pattern类和Matcher类来应用。


      这里只列举在如何.NET和JS中使用正则表达式,其他的有兴趣可以问度娘。


      在.NET中使用正则表达式:


      简单画个窗体:


16.png


      引用System.Text.RegularExpressions命名空间,关于此命名空间可点击链接参考MSDN,在此暂不说明,只是举例说明用Regex类的IsMatch方法验证输入的字符串是否合法。


//验证数字
        private void btnIsNumber_Click(object sender, EventArgs e)
        {
            string valEx = @"^\d+$";      //定义验证数字的正则表达式规则
            if (!Regex.IsMatch(txtValidate.Text.Trim(),valEx))
            {
                MessageBox.Show("您输入的不是数字!");
            }
            else
            {
                MessageBox.Show("您输入的是数字!");
            }           
        }
        //验证手机号
        private void btnIsPhoneNum_Click(object sender, EventArgs e)
        {
            string valEx = @"^\d{11}$";    //定义验证数字的正则表达式规则,规定输入11为数字有效
            if (!Regex.IsMatch(txtValidate.Text.Trim(), valEx))
            {
                MessageBox.Show("您输入的不是手机号!");
            }
            else
            {
                MessageBox.Show("您输入的是手机号!");
            }
        }
        //验证中文
        private void btnIsChinese_Click(object sender, EventArgs e)
        {
            string valEx = @"^[\u4e00-\u9fa5]+$";    //定义验证中文的正则表达式规则
            if (!Regex.IsMatch(txtValidate.Text.Trim(), valEx))
            {
                MessageBox.Show("您输入的不是中文!");
            }
            else
            {
                MessageBox.Show("您输入的是中文!");
            }
        }
        //验证邮箱格式
        private void btnIsEmail_Click(object sender, EventArgs e)
        {
            string valEx = @"^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$"; //定义验证邮箱格式的正则表达式规则
            if (!Regex.IsMatch(txtValidate.Text.Trim(), valEx))
            {
                MessageBox.Show("您输入的不是邮箱!");
            }
            else
            {
                MessageBox.Show("您输入的是邮箱!");
            }
        }

        点击【查看效果

         

     在JS中应用正则表达式

     JS文件代码:  

1.<script language="javascript" type="text/javascript">
  function IsNumber()
  {
      //验证数字
    var strValidate=document.getElementById("txtValidate").value;
    var strIsNumber=/^\d+$/;  
    var b=strIsNumber.test(strValidate);
    if(b)
    {
    alert("字符串 "+strValidate+" 是数字");
    }else
    {
    alert("字符串 "+strValidate+" 不是数字");
    }
  }
  function IsPhoneNum()
  {
      //验证手机号
    var strValidate=document.getElementById("txtValidate").value;    
    var strIsPhoneNum=/^\d{11}$/;                                      
    var b=strIsPhoneNum.test(strValidate);
    if(b)
    {
    alert("字符串 "+strValidate+" 是手机号");
    }else
    {
    alert("字符串 "+strValidate+" 不是手机号");
    }
  }
  function IsChinese()
  {
      //验证中文  
    var strValidate=document.getElementById("txtValidate").value;    
    var strIsChinese=/^[\u4e00-\u9fa5]+$/;                                                           
    var b=strIsChinese.test(strValidate);
    if(b)
    {
    alert("字符串 "+strValidate+" 是中文");
    }else
    {
    alert("字符串 "+strValidate+" 不是中文");
    }
  }
  function IsEmail()
  {
      //验证邮箱 
    var strValidate=document.getElementById("txtValidate").value;    
    var strIsEmail=/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/;                                                           
    var b=strIsEmail.test(strValidate);
    if(b)
    {
    alert("字符串 "+strValidate+" 是邮箱");
    }else
    {
    alert("字符串 "+strValidate+" 不是邮箱");
    }
  }
</script>


       HTML代码:    


<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test</title>
</head>
<script type="text/javascript" src="test.js"></script>
<body>
<form name="form1" id="form1" action="" method="post">
     <p align="center">
     <input name="" id="txtValidate" type="text"/>
     </p>
     <p align="center">  
     <input name="" type="button" value="验证数字" onclick="javascript:IsNumber()" />
     <input name="" type="button" value="验证手机号" onclick="javascript:IsPhoneNum()"/>
     <input name="" type="button" value="验证中文" onclick="javascript:IsChinese()"/><span style="font-family: Arial, Helvetica, sans-serif;">   </span>
     <input name="" type="button" value="验证邮箱" onclick="javascript:IsEmail()"/>
     </p>
</form>
</body>
</html>


    点击【查看效果

相关文章
|
3月前
|
机器学习/深度学习 自然语言处理
正则表达式
正则表达式
15 0
|
6月前
|
索引
|
1月前
|
Unix Perl
基本正则表达式
基本正则表达式
14 2
|
7月前
|
机器学习/深度学习 程序员 vr&ar
正则表达式的使用
正则表达式的使用
36 0
|
9月前
最全常用正则表达式大全
最全常用正则表达式大全
|
11月前
|
前端开发 数据安全/隐私保护 Windows
常用的20个正则表达式
常用的20个正则表达式
242 0
|
新能源 Java Linux
你必须掌握的常用正则表达式大全
你必须掌握的常用正则表达式大全
946 1
你必须掌握的常用正则表达式大全
【正则表达式】总结
【正则表达式】总结
81 0
|
JavaScript C# 前端开发