正则表达式
前言:
我们在本地计算机中搜索文件时,经常会用“ * ”和“ ? ”来代替任意长度的字符和任意单个的字符;在搜索引擎中用" | "来代替或者的关系,双引号“”之间表示必须包含整段关键字等等。
再来看一个SQL语句:select * from T_Employee where eName like '胡%',即查询所有姓“胡”的员工,执行结果如下:
这些都涉及到了字符匹配的问题。
正则表达式是什么 ?
和上面的“*”、“?” 等符号相似,正则表达式也是用来描述符合某些规则的字符串格式的工具,虽然ASP.NET、JQuery等提供了验证控件,不过正则表达式制定的规范更加复杂也更加严谨,通常用来匹配、处理字符串。 比如: 规定注册的用户名长度为6到18位,只能由下划线、数字和字母组成,正则表达式为:/^[a-z0-9_-]{6,18}$/ 规定真实姓名必须为中文,正则表达式为:/^[u4e00-u9fa5]+$/ 规定输入必须为正确的邮箱格式,正则表达式为:/^([a-z0-9_.-]+)@([da-z.-]+).([a-z.]{2,6})$/ …… 这些对字符串的“约束”,都可以用正则表达式来描述。
看到这里您肯定会觉得眼花缭乱,对正则表达式产生反感,不要怕,老师常说,记是记不住的,所以我们只需要在需要用到的时候能找到就行,我想肯定没有人去花那么多功夫去背这些东西。当然,了解一些出现频率较高的元字符(正则表达式中的元素)可以帮助我们较快地“读懂”那些正则表达式。
常用的元字符及其含义:
这里只记录几个常用的现成的正则表达式(一般情况做个验证应该够用了),注意:千万不要记!用的时候再来找就行了!
如何应用正则表达式 ?
对正则表达式有所了解之后,该如何在我们的程序中应用?所有环境下都能应用正则表达式吗? 搜索时会发现,在相关搜索中会出现JS正则表达式、PHP正则表达式、Python正则表达式等等,由此看出,正则表达式的应用还是很广的,任何语言环境都“认识”它。
不过,在每种语言环境下,对正则表达式的应用都是有所差异的(毕竟每种环境调用的底层函数都不一样),比如我们.NET中常用Regex和Match等类来应用表达式,在JS中可以直接用String对象的test、match等方法应用,在Java中常用Pattern类和Matcher类来应用。 这里只列举在如何.NET和JS中使用正则表达式,其他的有兴趣可以问度娘。
在.NET中使用正则表达式: 简单画个窗体:
引用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文件代码:
<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> 点击【查看效果】 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |