正则表达式

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

      前言


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

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>


    点击【查看效果

相关文章
|
数据可视化 Go 数据库
WEGO使用—在线GO功能注释
WEGO是华大基因公司的一个在线GO注释的网站,根据网站的介绍:WEGO(网络基因本体注释图)是一个简单但有用的工具,用于可视化,比较和绘制基因本体注释结果。随着围棋词汇越来越流行,WEGO在许多研究中被广泛采用和使用,最新一次的更新是在2018年。
1080 0
|
5月前
|
数据可视化 Python
【负荷预测】基于变分模态分解(VMD-CNN-LSTM)的短期电力负荷预测【Python】
本项目实现了一种基于变分模态分解(VMD)的短期电力负荷预测模型——VMD-CNN-LSTM。通过VMD技术将原始电力负荷数据分解为多个平稳子序列,结合温度和时间等特征构建矩阵,输入CNN-LSTM模型训练,最终叠加重构得到预测结果。此方法有效应对非线性和非平稳性引起的误差,精度高且稳定性强。程序采用Python编写,注释清晰,运行稳定,并提供直观的可视化结果。附带部分代码及详细运行结果展示,下载链接已提供。
|
11月前
|
IDE Java 编译器
Java:如何确定编译和运行时类路径是否一致
类路径(Classpath)是JVM用于查找类文件的路径列表,对编译和运行Java程序至关重要。编译时通过`javac -classpath`指定,运行时通过`java -classpath`指定。IDE如Eclipse和IntelliJ IDEA也提供界面管理类路径。确保编译和运行时类路径一致,特别是外部库和项目内部类的路径设置。
625 5
|
10月前
内存池适用于哪些场景
内存池适用于哪些场景
|
数据采集 运维 算法
Best Matching Unit,简称 BMU
最佳匹配单元(Best Matching Unit,简称 BMU)是自组织映射(Self-Organizing Maps,简称 SOM)算法中的一个重要概念。在 SOM 网络中,每个神经元都对应一个权重向量,表示该神经元对输入特征的响应。BMU 是指在 SOM 网络中与输入数据最相似的神经元,即具有与输入数据最接近的权重向量。在训练过程中
531 3
|
数据挖掘 数据管理 大数据
超算入门使用笔记丨大规模数据分析时电脑配置不够用?试试超级计算机集群
超算入门使用笔记丨大规模数据分析时电脑配置不够用?试试超级计算机集群
|
弹性计算 负载均衡 对象存储
阿里云服务器申请免费试用图文教程(个人和企业均可申请)
2023年阿里云服务器申请免费试用图文教程(个人和企业均可申请)
1057 0
|
传感器 人工智能 算法
从效率到价值:云峰会阿里云产业智能OpenTrek重磅发布
随着数字化技术的快速发展,企业数字化转型的需求随之增加。如何满足企业数字化转型需求、高效解决行业难题成为新的挑战。“封装”五大技术的产业智能OpenTrek在云峰会上正式发布,其中包含了阿里云多年沉淀出的行业数据平台、行业智能产品以及与合作伙伴共创的行业解决方案。阿里云智能副总裁、行业解决方案研发部负责人曾震宇表示:产业智能=数据+计算+智能化。
从效率到价值:云峰会阿里云产业智能OpenTrek重磅发布
|
SQL 数据库
SQL 基础(一)创建、查看、修改、删除数据库
分别使用 Microsoft SQL Server Management Studio 和 T-SQL 语句创建、查看、修改、删除数据库
1603 1
SQL 基础(一)创建、查看、修改、删除数据库
PuTTy:PuTTy的简介、安装、使用方法之详细攻略
PuTTy:PuTTy的简介、安装、使用方法之详细攻略
PuTTy:PuTTy的简介、安装、使用方法之详细攻略