前言:
我们在本地计算机中搜索文件时,经常会用“ * ”和“ ? ”来代替任意长度的字符和任意单个的字符;在搜索引擎中用" | "来代替或者的关系,双引号“”之间表示必须包含整段关键字等等。
再来看一个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文件代码:
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>
点击【查看效果】