正则表达式

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

      前言


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

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年。
1153 0
|
6月前
|
数据可视化 Python
【负荷预测】基于变分模态分解(VMD-CNN-LSTM)的短期电力负荷预测【Python】
本项目实现了一种基于变分模态分解(VMD)的短期电力负荷预测模型——VMD-CNN-LSTM。通过VMD技术将原始电力负荷数据分解为多个平稳子序列,结合温度和时间等特征构建矩阵,输入CNN-LSTM模型训练,最终叠加重构得到预测结果。此方法有效应对非线性和非平稳性引起的误差,精度高且稳定性强。程序采用Python编写,注释清晰,运行稳定,并提供直观的可视化结果。附带部分代码及详细运行结果展示,下载链接已提供。
|
12月前
|
传感器 机器学习/深度学习 人工智能
AI在智能制造中的革新应用与未来展望
【10月更文挑战第10天】AI在智能制造中的革新应用与未来展望
|
11月前
|
人工智能 监控 数据可视化
什么是低代码平台,低代码平台有哪些优势?
低代码平台通过可视化建模和模块化设计减少编码需求,加速应用开发。其核心技术包括描述式编程和模型驱动开发,支持数据结构自动化管理、业务规则自动执行和模块间自动集成。相比传统开发,低代码平台提高了开发效率,支持微服务架构、事件驱动架构和自动化测试。低代码平台适用于数据分析、智能应用集成和跨平台应用开发等多种场景,未来将结合AI技术,实现更灵活的配置和自动化开发。访问官网:http://www.jeelowcode.com,演示地址:http://demo.jeelowcode.com:8088,源码地址:https://gitee.com/jeelowecode/JeeLowCode。
310 0
|
12月前
|
IDE Java 编译器
Java:如何确定编译和运行时类路径是否一致
类路径(Classpath)是JVM用于查找类文件的路径列表,对编译和运行Java程序至关重要。编译时通过`javac -classpath`指定,运行时通过`java -classpath`指定。IDE如Eclipse和IntelliJ IDEA也提供界面管理类路径。确保编译和运行时类路径一致,特别是外部库和项目内部类的路径设置。
651 5
|
11月前
内存池适用于哪些场景
内存池适用于哪些场景
|
12月前
|
vr&ar 数据安全/隐私保护 网络架构
一文带你了解WiFi7,比WiFi6强多了!
【10月更文挑战第2天】
1865 1
一文带你了解WiFi7,比WiFi6强多了!
|
数据采集 运维 算法
Best Matching Unit,简称 BMU
最佳匹配单元(Best Matching Unit,简称 BMU)是自组织映射(Self-Organizing Maps,简称 SOM)算法中的一个重要概念。在 SOM 网络中,每个神经元都对应一个权重向量,表示该神经元对输入特征的响应。BMU 是指在 SOM 网络中与输入数据最相似的神经元,即具有与输入数据最接近的权重向量。在训练过程中
547 3
RK3399平台开发系列讲解(内核入门篇)1.51、platform_get_resource 函数实现细节
RK3399平台开发系列讲解(内核入门篇)1.51、platform_get_resource 函数实现细节
243 0
RK3399平台开发系列讲解(内核入门篇)1.51、platform_get_resource 函数实现细节
|
数据挖掘 数据管理 大数据
超算入门使用笔记丨大规模数据分析时电脑配置不够用?试试超级计算机集群
超算入门使用笔记丨大规模数据分析时电脑配置不够用?试试超级计算机集群