快捷搜索:

使用正则表达式,身份证正则表达式

2019-11-13 19:10栏目:关于澳门金莎
TAG:

//身份证正则表达式(15位) 
isIDCard1=/^[1-9]d{7}((0d)|(1[0-2]))(([0|1|2]d)|3[0-1])d{3}$/; 
//身份证正则表达式(18位) 
isIDCard2=/^[1-9]d{5}[1-9]d{3}((0d)|(1[0-2]))(([0|1|2]d)|3[0-1])d{3}([0-9]|X)$/; 
地区、性别和身份证进行判断的正则表达式: 
<script> 
var 
aCity={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",33:"浙江",34:" 

摘要:收集一些常用的正则表达式。

 1图片 1using System;
 2图片 2using System.Text.RegularExpressions;
 3图片 3
 4图片 4namespace bobomousecom.crm
 5图片 5图片 6图片 7{
 6图片 8图片 9 /**//**//**//// <summary>
 7图片 10 /// Regexlib 的摘要说明。
 8图片 11 /// </summary>
 9图片 12 public class Regexlib
10图片 13图片 14 图片 15{
11图片 16  public Regexlib()
12图片 17图片 18  图片 19{
13图片 20   //
14图片 21   // TODO: 在此处添加构造函数逻辑
15图片 22   //
16图片 23  }
17图片 24
18图片 25
19图片 26  //搜索输入字符串并返回所有 href=“”值
20图片 27  string DumpHrefs(String inputString) 
21图片 28图片 29  图片 30{
22图片 31   Regex r;
23图片 32   Match m;
24图片 33
25图片 34   r = new Regex("hrefs*=s*(?:"(?<1>[^"]*)"|(?<1>S+))",
26图片 35    RegexOptions.IgnoreCase|RegexOptions.Compiled);
27图片 36   for (m = r.Match(inputString); m.Success; m = m.NextMatch()) 
28图片 37图片 38   图片 39{
29图片 40    return("Found href " + m.Groups[1]);
30图片 41   }
31图片 42  }
32图片 43
33图片 44
34图片 45
35图片 46  //验证Email地址
36图片 47  bool IsValidEmail(string strIn)
37图片 48图片 49  图片 50{
38图片 51   // Return true if strIn is in valid e-mail format.
39图片 52   return Regex.IsMatch(strIn, @"^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$"); 
40图片 53  }
41图片 54
42图片 55
43图片 56  //dd-mm-yy 的日期形式代替 mm/dd/yy 的日期形式。
44图片 57  string MDYToDMY(String input) 
45图片 58图片 59  图片 60{
46图片 61   return Regex.Replace(input,"b(?d{1,2})/(?d{1,2})/(?d{2,4})b","${day}-${month}-${year}");
47图片 62  }
48图片 63
49图片 64
50图片 65  //验证是否为小数
51图片 66  bool IsValidDecimal(string strIn)
52图片 67图片 68  图片 69{
53图片 70   
54图片 71   return Regex.IsMatch(strIn,@"[0].d{1,2}|[1]"); 
55图片 72  }
56图片 73
57图片 74
58图片 75  //验证是否为电话号码
59图片 76  bool IsValidTel(string strIn)
60图片 77图片 78  图片 79{
61图片 80   return Regex.IsMatch(strIn,@"(d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)?"); 
62图片 81  }
63图片 82
64图片 83
65图片 84  //验证年月日
66图片 85  bool IsValidDate(string strIn)
67图片 86图片 87  图片 88{
68图片 89   return Regex.IsMatch(strIn,@"^2d{3}-(?:0?[1-9]|1[0-2])-(?:0?[1-9]|[1-2]d|3[0-1])(?:0?[1-9]|1d|2[0-3]):(?:0?[1-9]|[1-5]d):(?:0?[1-9]|[1-5]d)$"); 
69图片 90  }
70图片 91
71图片 92
72图片 93  //验证后缀名
73图片 94  bool IsValidPostfix(string strIn)
74图片 95图片 96  图片 97{
75图片 98   return Regex.IsMatch(strIn,@".(?i:gif|jpg)$"); 
76图片 99  }
77图片 100
78图片 101
79图片 102  //验证字符是否在4至12之间
80图片 103  bool IsValidByte(string strIn)
81图片 104图片 105  图片 106{
82图片 107   return Regex.IsMatch(strIn,@"^[a-z]{4,12}$"); 
83图片 108  }
84图片 109
85图片 110
86图片 111  //验证IP
87图片 112  bool IsValidIp(string strIn)
88图片 113图片 114  图片 115{
89图片 116   return Regex.IsMatch(strIn,@"^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$"); 
90图片 117  } 
91图片 118 }
92图片 119}
93图片 120

安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州" 

正则表达式用于字符串处理,表单验证等场合,实用高效,但用到时总是不太把握,以致往往要上网查一番。我将一些常用的表达式收藏在这里,作备忘之用。本贴随时会更新。

图片 121C#正则表达式小结    
图片 122只能输入数字:"^[0-9]*$"。
图片 123只能输入n位的数字:"^d{n}$"。
图片 124只能输入至少n位的数字:"^d{n,}$"。
图片 125只能输入m~n位的数字:。"^d{m,n}$"
图片 126只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"。
图片 127只能输入有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$"。
图片 128只能输入有1~3位小数的正实数:"^[0-9]+(.[0-9]{1,3})?$"。
图片 129只能输入非零的正整数:"^+?[1-9][0-9]*$"。
图片 130只能输入非零的负整数:"^-[1-9][]0-9"*$。
图片 131只能输入长度为3的字符:"^.{3}$"。
图片 132只能输入由26个英文字母组成的字符串:"^[A-Za-z]+$"。
图片 133只能输入由26个大写英文字母组成的字符串:"^[A-Z]+$"。
图片 134只能输入由26个小写英文字母组成的字符串:"^[a-z]+$"。
图片 135只能输入由数字和26个英文字母组成的字符串:"^[A-Za-z0-9]+$"。
图片 136只能输入由数字、26个英文字母或者下划线组成的字符串:"^w+$"。
图片 137只能输入由数字、26个英文字母或者下划线,中文组成的字符串:^\w+$
图片 138验证用户密码:"^[a-zA-Z]w{5,17}$"正确格式为:以字母开头,长度在6~18之间,只能包含字符、数字和下划线。
图片 139验证是否含有^%&',;=?$"等字符:"[^%&',;=?$x22]+"。
图片 140只能输入汉字:"^[u4e00-u9fa5]{0,}$"
图片 141验证Email地址:"^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$"。
图片 142验证InternetURL:"^
图片 143验证电话号码:"^((d{3,4}-)|d{3.4}-)?d{7,8}$"正确格式为:"XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。
图片 144验证身份证号(15位或18位数字):"^d{15}|d{18}$"。
图片 145验证一年的12个月:"^(0?[1-9]|1[0-2])$"正确格式为:"01"~"09"和"1"~"12"。
图片 146验证一个月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正确格式为;"01"~"09"和"1"~"31"。 
图片 147
图片 148利用正则表达式限制网页表单里的文本框输入内容:
图片 149
图片 150用正则表达式限制只能输入中文:onkeyup="value=value.replace(/[^u4E00-u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^u4E00-u9FA5]/g,''))"
图片 151
图片 152用正则表达式限制只能输入全角字符: onkeyup="value=value.replace(/[^uFF00-uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^uFF00-uFFFF]/g,''))"
图片 153
图片 154用正则表达式限制只能输入数字:onkeyup="value=value.replace(/[^d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"
图片 155
图片 156用正则表达式限制只能输入数字和英文:onkeyup="value=value.replace(/[W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"
图片 157
图片 158得用正则表达式从URL地址中提取文件名的javascript程序,如下结果为page1
图片 159
图片 160s=""
图片 161图片 162s=s.replace(/(.*/)图片 163{0,}([^.]+).*/ig,"$2")
图片 164alert(s)
图片 165
图片 166
图片 167匹配双字节字符(包括汉字在内):[^x00-xff]
图片 168
图片 169应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
图片 170
图片 171图片 172String.prototype.len=function()图片 173{return this.replace([^x00-xff]/g,"aa").length;}
图片 174
图片 175匹配空行的正则表达式:n[s| ]*r
图片 176
图片 177匹配HTML标记的正则表达式:/<(.*)>.*</1>|<(.*) />/ 
图片 178
图片 179匹配首尾空格的正则表达式:(^s*)|(s*$)
图片 180
图片 181
图片 182String.prototype.trim = function()
图片 183图片 184图片 185{
图片 186return this.replace(/(^s*)|(s*$)/g, "");
图片 187}
图片 188
图片 189利用正则表达式分解和转换IP地址:
图片 190
图片 191下面是利用正则表达式匹配IP地址,并将IP地址转换成对应数值的javascript程序:
图片 192
图片 193function IP2V(ip)
图片 194图片 195图片 196{
图片 197re=/(d+).(d+).(d+).(d+)/g //匹配IP地址的正则表达式
图片 198if(re.test(ip))
图片 199图片 200图片 201{
图片 202return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
图片 203}
图片 204else
图片 205图片 206图片 207{
图片 208throw new Error("Not a valid IP address!")
图片 209}
图片 210}
图片 211
图片 212不过上面的程序如果不用正则表达式,而直接用split函数来分解可能更简单,程序如下:
图片 213
图片 214var ip="10.100.20.168"
图片 215ip=ip.split(".")
图片 216alert("IP值是:"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))
图片 217 
图片 218

,53:"云南",54:"西藏",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"} 

匹配中文字符的正则表达式: [u4e00-u9fa5]


function cidInfo(sId){ 
var iSum=0 
var info="" 
if(!/^d{17}(d|x)$/i.test(sId))return false; 
sId=sId.replace(/x$/i,"a"); 
if(aCity[parseInt(sId.substr(0,2))]==null)return "Error:非法地区"; 
sBirthday=sId.substr(6,4)+"-"+Number(sId.substr(10,2))+"-"+Number(sId.substr(12,2)); 
var d=new Date(sBirthday.replace(/-/g,"/")) 
if(sBirthday!=(d.getFullYear()+"-"+ (d.getMonth()+1) + "-" + d.getDate()))return "Error:非法生日"; 
for(var i = 17;i>=0;i --) iSum += (Math.pow(2,i) % 11) * parseInt(sId.charAt(17 - i),11) 
if(iSum%11!=1)return "Error:非法证号"; 
return aCity[parseInt(sId.substr(0,2))]+","+sBirthday+","+(sId.substr(16,1)%2?"男":"女") 

匹配双字节字符(包括汉字在内):[^x00-xff]

</script>

应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)


String.prototype.len=function(){return this.replace([^x00-xff]/g,"aa").length;}

正则表达式全集

匹配空行的正则表达式:n[s| ]*r

  中国电话号码验证

匹配HTML标记的正则表达式:/<(.*)>.*</1>|<(.*) />/

  匹配形式如:0511-4405222 或者021-87888822 或者 021-44055520-555 或者 (0511)4405222

匹配首尾空格的正则表达式:(^s*)|(s*$)

  正则表达式 "((d{3,4})|d{3,4}-)?d{7,8}(-d{3})*"

应用:javascript中没有像vbscript那样的trim函数,我们就可以利用这个表达式来实现,如下:

  中国邮政编码验证

String.prototype.trim = function()
{
return this.replace(/(^s*)|(s*$)/g, "");
}

  匹配形式如:215421

利用正则表达式分解和转换IP地址:

  正则表达式 "d{6}"

下面是利用正则表达式匹配IP地址,并将IP地址转换成对应数值的Javascript程序:

  电子邮件验证

function IP2V(ip)
{
re=/(d+).(d+).(d+).(d+)/g //匹配IP地址的正则表达式
if(re.test(ip))
{
return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
}
else
{
throw new Error("Not a valid IP address!")
}
}

  匹配形式如:justali@justdn.com

不过上面的程序如果不用正则表达式,而直接用split函数来分解可能更简单,程序如下:

  正则表达式 "w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*"

var ip="10.100.20.168"
ip=ip.split(".")
alert("IP值是:"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))

  身份证验证

匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*

  匹配形式如:15位或者18位身份证

匹配网址URL的正则表达式: ./?%&=]*)?

  正则表达式 "d{18}|d{15}"

利用正则表达式去除字串中重复的字符的算法程序:[注:此程序不正确,原因见本贴回复]

  常用数字验证

var s="abacabefgeeii"
var s1=s.replace(/(.).*1/g,"$1")
var re=new RegExp("["+s1+"]","g")
var s2=s.replace(re,"")
alert(s1+s2) //结果为:abcefgi

  正则表达式

我原来在CSDN上发贴寻求一个表达式来实现去除重复字符的方法,最终没有找到,这是我能想到的最简单的实现方法。思路是使用后向引用取出包括重复的字符,再以重复的字符建立第二个表达式,取到不重复的字符,两者串连。这个方法对于字符顺序有要求的字符串可能不适用。

  "d{n}" n为规定长度

得用正则表达式从URL地址中提取文件名的javascript程序,如下结果为page1

  "d{n,m}" n到m的长度范围

s=""
s=s.replace(/(.*/){0,}([^.]+).*/ig,"$2")
alert(s)

  非法字符验证

利用正则表达式限制网页表单里的文本框输入内容:

  匹配非法字符如:< > & / ' |

用正则表达式限制只能输入中文:onkeyup="value=value.replace(/[^u4E00-u9FA5]/g,')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^u4E00-u9FA5]/g,'))"

  正则表达式 [^<>&/|']+

用正则表达式限制只能输入全角字符: onkeyup="value=value.replace(/[^uFF00-uFFFF]/g,')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^uFF00-uFFFF]/g,'))"

  日期验证

用正则表达式限制只能输入数字:onkeyup="value=value.replace(/[^d]/g,') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,'))"

  匹配形式如:20030718,030718

用正则表达式限制只能输入数字和英文:onkeyup="value=value.replace(/[W]/g,') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,'))"

  范围:1900--2099

正则表达式,相关链接

微软的正则表达式教程(五):选择/编组和后向引用

  正则表达式((((19){1}|(20){1})d{2})|d{2})[01]{1}d{1}[0-3]{1}d{1}

微软的正则表达式教程(四):限定符和定位符

  正则表达式是一个好东西,但是一般情况下,我们需要验证的内容少之又少。下面是常用的17种正则表达式:

微软的正则表达式教程(三):字符匹配

  "^d+$"  //非负整数(正整数 + 0)

微软的正则表达式教程(二):正则表达式语法和优先权顺序

  "^[0-9]*[1-9][0-9]*$"  //正整数

微软的正则表达式教程(一):正则表达式简介

  "^((-d+)|(0+))$"  //非正整数(负整数 + 0)

小程序大作为:高级查找/替换、正则表达式练习器、Javascript脚本程序调试器

  "^-[0-9]*[1-9][0-9]*$"  //负整数

经典正则表达式

  "^-?d+$"    //整数

正则表达式,正规表达式,正则表达式匹配,正则表达式语法,模式匹配,正规表达式匹配 javascript正则表达式 ASP正则表达式 ASP.NET正则表达式 C#正则表达式 JSP正则表达式 PHP正则表达式 VB.NET正则表达式 VBSCript正则表达式编程 delphi正则表达式 jscript

  "^d+(.d+)?$"  //非负浮点数(正浮点数 + 0)

正则表达式 regular expression
正则表达式 RegExp
模式 pattern
匹配 Match
.NET命名空间: System.Text.RegularExpression

  "^(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*))$"  //正浮点数

补充:
^d+$  //匹配非负整数(正整数 + 0)
^[0-9]*[1-9][0-9]*$  //匹配正整数
^((-d+)|(0+))$  //匹配非正整数(负整数 + 0)
^-[0-9]*[1-9][0-9]*$  //匹配负整数
^-?d+$    //匹配整数
^d+(.d+)?$  //匹配非负浮点数(正浮点数 + 0)
^(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*))$  //匹配正浮点数
^((-d+(.d+)?)|(0+(.0+)?))$  //匹配非正浮点数(负浮点数 + 0)
^(-(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*)))$  //匹配负浮点数
^(-?d+)(.d+)?$  //匹配浮点数
^[A-Za-z]+$  //匹配由26个英文字母组成的字符串
^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串
^[a-z]+$  //匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串
^w+$  //匹配由数字、26个英文字母或者下划线组成的字符串
^[w-]+(.[w-]+)*@[w-]+(.[w-]+)+$    //匹配email地址
^[a-zA-z]+://匹配(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$  //匹配url

  "^((-d+(.d+)?)|(0+(.0+)?))$"  //非正浮点数(负浮点数 + 0)

利用正则表达式去除字串中重复的字符的算法程序:

  "^(-(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*)))$"  //负浮点数

var s="abacabefgeeii"
var s1=s.replace(/(.).*1/g,"$1")
var re=new RegExp("["+s1+"]","g")
var s2=s.replace(re,"")

  "^(-?d+)(.d+)?$"  //浮点数

alert(s1+s2) //结果为:abcefgi

如果var s = "abacabefggeeii"
结果就不对了,结果为:abeicfgg
正则表达式的能力有限

RE: totoro
谢谢你的指点,这个javascript正则表达式程序算法确实有问题,我会试着找更好的办法!!!

1.确认有效电子邮件格式
下面的代码示例使用静态 Regex.IsMatch 方法验证一个字符串是否为有效电子邮件格式。如果字符串包含一个有效的电子邮件地址,则 IsValidEmail 方法返回 true,否则返回 false,但不采取其他任何操作。您可以使用 IsValidEmail,在应用程序将地址存储在数据库中或显示在 ASP.NET 页中之前,筛选出包含无效字符的电子邮件地址。

[Visual Basic]
Function IsValidEmail(strIn As String) As Boolean
' Return true if strIn is in valid e-mail format.
Return Regex.IsMatch(strIn, ("^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$")
End Function
[C#]
bool IsValidEmail(string strIn)
{
// Return true if strIn is in valid e-mail format.
return Regex.IsMatch(strIn, @"^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$");
}

2.清理输入字符串
下面的代码示例使用静态 Regex.Replace 方法从字符串中抽出无效字符。您可以使用这里定义的 CleanInput 方法,清除掉在接受用户输入的窗体的文本字段中输入的可能有害的字符。CleanInput 在清除掉除 @、-(连字符)和 .(句点)以外的所有非字母数字字符后返回一个字符串。

[Visual Basic]
Function CleanInput(strIn As String) As String
' Replace invalid characters with empty strings.
Return Regex.Replace(strIn, "[^w.@-]", "")
End Function
[C#]
String CleanInput(string strIn)
{
// Replace invalid characters with empty strings.
return Regex.Replace(strIn, @"[^w.@-]", "");
}

3.更改日期格式
以下代码示例使用 Regex.Replace 方法来用 dd-mm-yy 的日期形式代替 mm/dd/yy 的日期形式。

[Visual Basic]
Function MDYToDMY(input As String) As String
Return Regex.Replace(input, _
"b(?<month>d{1,2})/(?<day>d{1,2})/(?<year>d{2,4})b", _
"${day}-${month}-${year}")
End Function
[C#]
String MDYToDMY(String input)
{
return Regex.Replace(input,
"\b(?<month>\d{1,2})/(?<day>\d{1,2})/(?<year>\d{2,4})\b",
"${day}-${month}-${year}");
}
Regex 替换模式
本示例说明如何在 Regex.Replace 的替换模式中使用命名的反向引用。其中,替换表达式 ${day} 插入由 (?<day>...) 组捕获的子字符串。

有几种静态函数使您可以在使用正则表达式操作时无需创建显式正则表达式对象,而 Regex.Replace 函数正是其中之一。如果您不想保留编译的正则表达式,这将给您带来方便

4.提取 URL 信息
以下代码示例使用 Match.Result 来从 URL 提取协议和端口号。例如,“

[Visual Basic]
Function Extension(url As String) As String
Dim r As New Regex("^(?<proto>w+)://[^/]+?(?<port>:d+)?/", _
RegexOptions.Compiled)
Return r.Match(url).Result("${proto}${port}")
End Function
[C#]
String Extension(String url)
{
Regex r = new Regex(@"^(?<proto>w+)://[^/]+?(?<port>:d+)?/",
RegexOptions.Compiled);
return r.Match(url).Result("${proto}${port}");
}

今天有网友问:如何用正则表达式表示要么是数字要么是字母 是字母的话只能是一个字母 数字则无所谓?
我的回答是:
^[a-zA-Z]$|^d+$


  "^[A-Za-z]+$"  //由26个英文字母组成的字符串

  "^[A-Z]+$"  //由26个英文字母的大写组成的字符串

  "^[a-z]+$"  //由26个英文字母的小写组成的字符串

  "^[A-Za-z0-9]+$"  //由数字和26个英文字母组成的字符串

  "^w+$"  //由数字、26个英文字母或者下划线组成的字符串

  "^[w-]+(.[w-]+)*@[w-]+(.[w-]+)+$"    //email地址

  "^[a-zA-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$"  //url

  [code]电子邮件 : @"^w+((-w+)|(.w+))*@w+((.|-)w+)*.w+$"

  HTTP URL : @"^[url] ./?%&=]*)?";

  邮编 : @"d{6}"

  身份证 : @"d{18}|d{15}"

  整数 : @"^d{1,}$"

  数值 : @"^-?(0|d+)(.d+)?$"

  日期 : @"^(?:(?:(?:(?:1[6-9]|[2-9]d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))(/|-|.)(?:0?21(?:29))$)|(?:(?:1[6-9]|[2-9]d)?d{2})(/|-|.)(?:(?:(?:0?[13578]|1[02])2(?:31))|(?:(?:0?[1,3-9]|1[0-2])2(29|30))|(?:(?:0?[1-9])|(?:1[0-2]))2(?:0?[1-9]|1d|2[0-8]))$"

  合法的用户名(以字母开头,长度不小于4) : @"(([a-zA-Z]){1})+(w{3,29})"[/code]

  <="">[code]常用正则表达式语法例句

  这里有一些可能会遇到的正则表达式示例:

  /^[ t]*$/ "^[ t]*$" 匹配一个空白行。

  /d{2}-d{5}/ "d{2}-d{5}" 验证一个ID号码是否由一个2位字,一

  个连字符以及一个5位数字组成。

  /<(.*)>.*</1>/ "<(.*)>.*</1>" 匹配一个 HTML 标记。

  下表是元字符及其在正则表达式上下文中的行为的一个完整列表:

  字符 描述

   将下一个字符标记为一个特殊字符、或一个原义字符、或一个 后

  向引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'n'

  匹配一个换行符。序列 '\' 匹配 "" 而 "(" 则匹配 "("。

  ^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的

  Multiline 属性,^ 也匹配 'n' 或 'r' 之后的位置。

  $ 匹配输入字符串的结束位置。如果设置了 RegExp 对象的

  Multiline 属性,$ 也匹配 'n' 或 'r' 之前的位置。

  * 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及

  "zoo"。 * 等价于{0,}。

  + 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以

  及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。

  ? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配

  "do" 或 "does" 中的"do" 。? 等价于 {0,1}。

  {n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配

  "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。

  {n,} n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配

  "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}'

  等价于 'o+'。'o{0,}' 则等价于 'o*'。

  {n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹

  配 m 次。刘, "o{1,3}" 将匹配 "fooooood" 中的前三个o。

  'o{0,1}'等价于'o?'。请注意在逗号和两个数之间不能有空格

  ? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,},

  {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的

  匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜

  索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个

  "o",而 'o+' 将匹配所有 'o'。

  . 匹配除 "n" 之外的任何单个字符。要匹配包括 'n' 在内的任

  何字符,请使用象 '[.n]' 的模式。

  (pattern) 匹配pattern 并获取这一匹配。所获取的匹配可以从产生的

  Matches 集合得到,在VBScript 中使用 SubMatches 集合,在

  Visual Basic Scripting Edition 中则使用 $0…$9 属性。要

  匹配圆括号字符,请使用 '(' 或 ')'。

  (?:pattern) 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹

  配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合

  一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。

  (?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,'Windows (?=95|98|NT|2000)' 能匹配"Windows2000"中的"Windows",但不能匹配"Windows3 .1"中"Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。

  (?!pattern) 负向预查,在任何不匹配Negative lookahead matches the

  search string at any point where a string not matching

  pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows(?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始x|y 匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。[xyz] 字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。[^xyz] 负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。[a-z] 字符范围。匹配指定范围内的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。

  [^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符。例如,

  '[^a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。

  b 匹配一个单词边界,也就是指单词和空格间的位置。例如,

  'erb' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。

  B 匹配非单词边界。'erB' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。

  cx 匹配由x指明的控制字符。例如, cM 匹配一个 Control-M 或回车符。

        x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。

        d 匹配一个数字字符。等价于 [0-9]。

  D 匹配一个非数字字符。等价于 [^0-9]。

  f 匹配一个换页符。等价于 x0c 和 cL。

  n 匹配一个换行符。等价于 x0a 和 cJ。

  r 匹配一个回车符。等价于 x0d 和 cM。

  s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ fnrtv]。

  S 匹配任何非空白字符。等价于 [^ fnrtv]。

  t 匹配一个制表符。等价于 x09 和 cI。

  v 匹配一个垂直制表符。等价于 x0b 和 cK。

  w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。

  W 匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。

  xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如, 'x41' 匹配 "A"。'x041' 则等价于 'x04' & "1"。正则表达式中可以使用 ASCII 编码。.

  num 匹配 num,其中num是一个正整数。对所获取的匹配的引用。

  例如,'(.)1' 匹配两个连续的相同字符。

  n 标识一个八进制转义值或一个后向引用。如果 n 之前至少 n个获取的子表达式,则 n 为后向引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。

  nm 标识一个八进制转义值或一个后向引用。如果 nm 之前至少有is preceded by at least nm 个获取得子表达式,则 nm 为后向引用。如果 nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的后向引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 nm 将匹配八进制转义值 nm。

  nml 如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。

  un 匹配 n,其中 n 是一个用四个十六进制数字表示的Unicode字符。例如, u00A9 匹配版权符号 (?)。 [/code]

  常用正则表达式

  --------------------------------------------------------------------------------

  匹配html的嵌入代码 [code]<[^>]*>[/code]

  匹配[....]的嵌入码[code] [[^]]{1,}][/code]

  删除仅由空字符组成的行

  [code]sed '/^[[:space:]]*$/d' filename[/code]

  匹配html标签

  [code]/(<[^>]*>)/[/code]例如:从html文件中剔除html标签

  [code]sed 's/(<[^>]*>)//g;/^[[:space:]]*$/d' file.html[/code]

  例如:要从下列代码中去除"[]"及其中包括的代码

  [code][b][color=red]一. 替换[/color][/b]

  sed 's/[[^]]{1,}]//g' filename[/code]

  [b]匹配日期:[/b]

  [code]Month, Day, Year [A-Z][a-z]{3,9}, [0-9]{1,2}, [0-9]{4}

  2003-01-28 或 2003.10.18 或 2003/10/10 或 2003 10 10

  ([0-9]{4}[ /-.][0-2][0-9][ /-.][0-3][0-9])[/code]

  [b]匹配IP地址[/b]

  [code]([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})

  (([0-9]{1,3}.){3}[0-9]{1,3})[/code]

  [b]匹配数字串[/b]

  [code][-+]*[0-9]{1,} 整数

  [-+]*[0-9]{1,}.[0-9]{1,} 浮点数[/code]

  [b]从字串中解析出两个子串(前2各字符和后9个字符) [/b]

  [code]echo "WeLoveChinaUnix"|sed -e 'H;s/(..).*/1/;x;s/.*(.{9})$/1/;x;G;s/n/ /'

  We ChinaUnix [/code]

  [b]分解日期串[/b]

  [code]echo 20030922|sed 's/(....)(..)(..)/1 2 3/'|read year month day

  echo $year $month $day [/code]

  [b]文件内容倒序输出[/b]

  [code]sed '1!G;h;$!d' oldfile >newfile[/code]

  [code]匹配中文字符的正则表达式:

  [u4e00-u9fa5]

  匹配双字节字符(包括汉字在内):

  [^x00-xff]

  匹配空行的正则表达式:

  n[s| ]*r

  匹配HTML标记的正则表达式:

  /<(.*)>.*</1>|<(.*) />/

  匹配首尾空格的正则表达式:

  (^s*)|(s*$)

  URL:

  [url] ./?%&=]*)?

  Email:

  w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*

  中华人民共和国电话号码

  ((d{3})|d{3}-)?d{8}

  中华人民共和国邮编

  d{6}

  门丁注册的id格式:2-12位,数字、字符、下划线(0-9,a-z,A-Z,_)

  ^[0-9a-zA-Z]+(w){1,11}[/code]

  [color=red]蓝吧甜 宝宝:[/color][color=blue]主人,陪我去森林里玩好不好?

  你和宝宝在森林里找了个好东西给你~~管理员作的特别科研卡!

  卡片说明:获得社区特别科研基金100个金币。

  卡片效果:得到100金币。

  你高兴我也高兴![/color]

  [img]]

  [code]匹配中文字符的正则表达式: [u4e00-u9fa5]

  匹配双字节字符(包括汉字在内):[^x00-xff]

  匹配空行的正则表达式:n[s| ]*r

  匹配HTML标记的正则表达式:/<(.*)>.*</1>|<(.*) />/

  匹配首尾空格的正则表达式:(^s*)|(s*$)(像vbscript那样的trim函数)

  匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*

  匹配网址URL的正则表达式:[url] ./?%&=]*)?

  ---------------------------------------------------------------------------

  以下是例子:

  利用正则表达式限制网页表单里的文本框输入内容:

  用正则表达式限制只能输入中文:onkeyup="value=value.replace(/[^u4E00-u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^u4E00-u9FA5]/g,''))"

  1.用正则表达式限制只能输入全角字符: ')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^uFF00-uFFFF]/g,''))"

  2.用正则表达式限制只能输入数字:onkeyup="value=value.replace(/[^d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"

  3.用正则表达式限制只能输入数字和英文:onkeyup="value=value.replace(/[W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"

  4.计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

  String.prototype.len=function(){return this.replace([^x00-xff]/g,"aa").length;}

  5.javascript中没有像vbscript那样的trim函数,我们就可以利用这个表达式来实现,如下:

  String.prototype.trim = function()

  {

  return this.replace(/(^s*)|(s*$)/g, "");

  }

  利用正则表达式分解和转换IP地址:

  6.下面是利用正则表达式匹配IP地址,并将IP地址转换成对应数值的Javascript程序:

  function IP2V(ip)

  {

  re=/(d+).(d+).(d+).(d+)/g //匹配IP地址的正则表达式

  if(re.test(ip))

  {

  return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1

  }

  else

  {

  throw new Error("不是一个正确的IP地址!")

  }

  }

  不过上面的程序如果不用正则表达式,而直接用split函数来分解可能更简单,程序如下:

  var ip="10.100.20.168"

  ip=ip.split(".")

  alert("IP值是:"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))[/code]

  经典正则表达式(ZT) by lemon

  关键词: 正则表达式 by lemon posted at oioj on 2005-12-17 17:32:01 Weather: 晴 正则表达式用于字符串处理,表单验证等场合,实用高效,但用到时总是不太把握,以致往往要上网查一番。我将一些常用的表达式收藏在这里,作备忘之用。本贴随时会更新。匹配中文字符的正则表达式: [u4e00-u9fa5]匹配双字节字符(包括汉字在内):[^x00-xff]应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)String.prototype.len=function(){return this.replace([^x00-xff]/g,"aa").length;}匹配空行的正则表达式:n[s| ]*r匹配HTML标记的正则表达式:/<(.*)>.*</1>|<(.*) />/ 匹配首尾空格的正则表达式:(^s*)|(s*$)应用:javascript中没有像vbscript那样的trim函数,我们就可以利用这个表达式来实现,如下:String.prototype.trim = function()

  {

  return this.replace(/(^s*)|(s*$)/g, "");

  }利用正则表达式分解和转换IP地址:下面是利用正则表达式匹配IP地址,并将IP地址转换成对应数值的Javascript程序:function IP2V(ip)

  {

  re=/(d+).(d+).(d+).(d+)/g //匹配IP地址的正则表达式

  if(re.test(ip))

  {

  return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1

  }

  else

  {

  throw new Error("Not a valid IP address!")

  }

  }不过上面的程序如果不用正则表达式,而直接用split函数来分解可能更简单,程序如下:var ip="10.100.20.168"

  ip=ip.split(".")

  alert("IP值是:"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*匹配网址URL的正则表达式: ./?%&=]*)?利用正则表达式去除字串中重复的字符的算法程序:[注:此程序不正确,原因见本贴回复]var s="abacabefgeeii"

  var s1=s.replace(/(.).*1/g,"$1")

  var re=new RegExp("["+s1+"]","g")

  var s2=s.replace(re,"")

  alert(s1+s2) //结果为:abcefgi我原来在CSDN上发贴寻求一个表达式来实现去除重复字符的方法,最终没有找到,这是我能想到的最简单的实现方法。思路是使用后向引用取出包括重复的字符,再以重复的字符建立第二个表达式,取到不重复的字符,两者串连。这个方法对于字符顺序有要求的字符串可能不适用。得用正则表达式从URL地址中提取文件名的javascript程序,如下结果为page1s=""

  s=s.replace(/(.*/){0,}([^.]+).*/ig,"$2")

  alert(s)利用正则表达式限制网页表单里的文本框输入内容:用正则表达式限制只能输入中文:onkeyup="value=value.replace(/[^u4E00-u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^u4E00-u9FA5]/g,''))"用正则表达式限制只能输入全角字符: ')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^uFF00-uFFFF]/g,''))"用正则表达式限制只能输入数字:onkeyup="value=value.replace(/[^d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"用正则表达式限制只能输入数字和英文:onkeyup="value=value.replace(/[W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"

  正则表达式,相关链接

  

   微软的正则表达式教程(五):选择/编组和后向引用 微软的正则表达式教程(四):限定符和定位符 微软的正则表达式教程(三):字符匹配 微软的正则表达式教程(二):正则表达式语法和优先权顺序 微软的正则表达式教程(一):正则表达式简介 小程序大作为:高级查找/替换、正则表达式练习器、Javascript脚本程序调试器 经典正则表达式 正则表达式,正规表达式,正则表达式匹配,正则表达式语法,模式匹配,正规表达式匹配 javascript正则表达式 ASP正则表达式 ASP.NET正则表达式 C#正则表达式 JSP正则表达式 PHP正则表达式 VB.NET正则表达式 VBSCript正则表达式编程 delphi正则表达式 jscript

  补充:

  ^d+$  //匹配非负整数(正整数 + 0)

  ^[0-9]*[1-9][0-9]*$  //匹配正整数

  ^((-d+)|(0+))$  //匹配非正整数(负整数 + 0)

  ^-[0-9]*[1-9][0-9]*$  //匹配负整数

  ^-?d+$    //匹配整数

  ^d+(.d+)?$  //匹配非负浮点数(正浮点数 + 0)

  ^(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*))$  //匹配正浮点数

  ^((-d+(.d+)?)|(0+(.0+)?))$  //匹配非正浮点数(负浮点数 + 0)

  ^(-(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*)))$  //匹配负浮点数

  ^(-?d+)(.d+)?$  //匹配浮点数

  ^[A-Za-z]+$  //匹配由26个英文字母组成的字符串

  ^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串

  ^[a-z]+$  //匹配由26个英文字母的小写组成的字符串

  ^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串

  ^w+$  //匹配由数字、26个英文字母或者下划线组成的字符串

  ^[w-]+(.[w-]+)*@[w-]+(.[w-]+)+$    //匹配email地址

  ^[a-zA-z]+://匹配(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$  //匹配url 利用正则表达式去除字串中重复的字符的算法程序: var s="abacabefgeeii"

  var s1=s.replace(/(.).*1/g,"$1")

  var re=new RegExp("["+s1+"]","g")

  var s2=s.replace(re,"")

  alert(s1+s2) //结果为:abcefgi

  ===============================

  如果var s = "abacabefggeeii"

  结果就不对了,结果为:abeicfgg

  正则表达式的能力有限 1.确认有效电子邮件格式

  下面的代码示例使用静态 Regex.IsMatch 方法验证一个字符串是否为有效电子邮件格式。如果字符串包含一个有效的电子邮件地址,则 IsValidEmail 方法返回 true,否则返回 false,但不采取其他任何操作。您可以使用 IsValidEmail,在应用程序将地址存储在数据库中或显示在 ASP.NET 页中之前,筛选出包含无效字符的电子邮件地址。 [Visual Basic]

  Function IsValidEmail(strIn As String) As Boolean

  ' Return true if strIn is in valid e-mail format.

  Return Regex.IsMatch(strIn, ("^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$")

  End Function

  [C#]

  bool IsValidEmail(string strIn)

  {

  // Return true if strIn is in valid e-mail format.

  return Regex.IsMatch(strIn, @"^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$");

  }

  2.清理输入字符串

  下面的代码示例使用静态 Regex.Replace 方法从字符串中抽出无效字符。您可以使用这里定义的 CleanInput 方法,清除掉在接受用户输入的窗体的文本字段中输入的可能有害的字符。CleanInput 在清除掉除 @、-(连字符)和 .(句点)以外的所有非字母数字字符后返回一个字符串。 [Visual Basic]

  Function CleanInput(strIn As String) As String

  ' Replace invalid characters with empty strings.

  Return Regex.Replace(strIn, "[^w.@-]", "")

  End Function

  [C#]

  String CleanInput(string strIn)

  {

  // Replace invalid characters with empty strings.

  return Regex.Replace(strIn, @"[^w.@-]", "");

  }

  3.更改日期格式

  以下代码示例使用 Regex.Replace 方法来用 dd-mm-yy 的日期形式代替 mm/dd/yy 的日期形式。 [Visual Basic]

  Function MDYToDMY(input As String) As String

  Return Regex.Replace(input, _

  "b(?d{1,2})/(?d{1,2})/(?d{2,4})b", _

  "${day}-${month}-${year}")

  End Function

  [C#]

  String MDYToDMY(String input)

  {

  return Regex.Replace(input,

  "\b(?\d{1,2})/(?\d{1,2})/(?\d{2,4})\b",

  "${day}-${month}-${year}");

  }

  Regex 替换模式

  本示例说明如何在 Regex.Replace 的替换模式中使用命名的反向引用。其中,替换表达式 ${day} 插入由 (?...) 组捕获的子字符串。 有几种静态函数使您可以在使用正则表达式操作时无需创建显式正则表达式对象,而 Regex.Replace 函数正是其中之一。如果您不想保留编译的正则表达式,这将给您带来方便

  4.提取 URL 信息

  以下代码示例使用 Match.Result 来从 URL 提取协议和端口号。例如,“ [Visual Basic]

  Function Extension(url As String) As String

  Dim r As New Regex("^(?w+)://[^/]+?(?:d+)?/", _

  RegexOptions.Compiled)

  Return r.Match(url).Result("${proto}${port}")

  End Function

  [C#]

  String Extension(String url)

  {

  Regex r = new Regex(@"^(?w+)://[^/]+?(?:d+)?/",

  RegexOptions.Compiled);

  return r.Match(url).Result("${proto}${port}");

  }

  by lemon posted on 2005-12-17 17:32:51

  常用的匹配正则表达式和实例:

  正则表达式使用详解[转]

  关键词: 正则表达式 作者:吕晓波

  如果我们问那些UNIX系统的爱好者他们最喜欢什么,答案除了稳定的系统和可以远程启动之外,十有八九的人会提到正则表达式;如果我们再问他们最头痛的是什么,可能除了复杂的进程控制和安装过程之外,还会是正则表达式。那么正则表达式到底是什么?如何才能真正的掌握正则表达式并正确的加以灵活运用?本文将就此展开介绍,希望能够对那些渴望了解和掌握正则表达式的读者有所助益。

  入门简介

  简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具。我们可以在几乎所有的基于UNIX系统的工具中找到正则表达式的身影,例如,vi编辑器,Perl或PHP脚本语言,以及awk或sed Shell程序等。此外,象JavaScript这种客户端的脚本语言也提供了对正则表达式的支持。由此可见,正则表达式已经超出了某种语言或某个系统的局限,成为人们广为接受的概念和功能。

  正则表达式可以让用户通过使用一系列的特殊字符构建匹配模式,然后把匹配模式与数据文件、程序输入以及WEB页面的表单输入等目标对象进行比较,根据比较对象中是否包含匹配模式,执行相应的程序。

  举例来说,正则表达式的一个最为普遍的应用就是用于验证用户在线输入的邮件地址的格式是否正确。如果通过正则表达式验证用户邮件地址的格式正确,用户所填写的表单信息将会被正常处理;反之,如果用户输入的邮件地址与正则表达的模式不匹配,将会弹出提示信息,要求用户重新输入正确的邮件地址。由此可见正则表达式在WEB应用的逻辑判断中具有举足轻重的作用。

  基本语法

  在对正则表达式的功能和作用有了初步的了解之后,我们就来具体看一下正则表达式的语法格式。

  正则表达式的形式一般如下:

  /love/

  其中位于“/”定界符之间的部分就是将要在目标对象中进行匹配的模式。用户只要把希望查找匹配对象的模式内容放入“/”定界符之间即可。为了能够使用户更加灵活的定制模式内容,正则表达式提供了专门的“元字符”。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。

  较为常用的元字符包括: “+”, “*”,以及 “?”。其中,“+”元字符规定其前导字符必须在目标对象中连续出现一次或多次,“*”元字符规定其前导字符必须在目标对象中出现零次或连续多次,而“?”元字符规定其前导对象必须在目标对象中连续出现零次或一次。

  下面,就让我们来看一下正则表达式元字符的具体应用。

  /fo+/

  因为上述正则表达式中包含“+”元字符,表示可以与目标对象中的 “fool”, “fo”, 或者 “football”等在字母f后面连续出现一个或多个字母o的字符串相匹配。

  /eg*/

  因为上述正则表达式中包含“*”元字符,表示可以与目标对象中的 “easy”, “ego”, 或者 “egg”等在字母e后面连续出现零个或多个字母g的字符串相匹配。

  /Wil?/

  因为上述正则表达式中包含“?”元字符,表示可以与目标对象中的 “Win”, 或者 “Wilson”,等在字母i后面连续出现零个或一个字母l的字符串相匹配。

  除了元字符之外,用户还可以精确指定模式在匹配对象中出现的频率。例如,

  /jim{2,6}/

  上述正则表达式规定字符m可以在匹配对象中连续出现2-6次,因此,上述正则表达式可以同jimmy或jimmmmmy等字符串相匹配。

  在对如何使用正则表达式有了初步了解之后,我们来看一下其它几个重要的元字符的使用方式。

  s:用于匹配单个空格符,包括tab键和换行符;

  S:用于匹配除单个空格符之外的所有字符;

  d:用于匹配从0到9的数字;

  w:用于匹配字母,数字或下划线字符;

  W:用于匹配所有与w不匹配的字符;

  . :用于匹配除换行符之外的所有字符。

  (说明:我们可以把s和S以及w和W看作互为逆运算)

  下面,我们就通过实例看一下如何在正则表达式中使用上述元字符。

  /s+/

  上述正则表达式可以用于匹配目标对象中的一个或多个空格字符。

  /d000/

  如果我们手中有一份复杂的财务报表,那么我们可以通过上述正则表达式轻而易举的查找到所有总额达千元的款项。

  除了我们以上所介绍的元字符之外,正则表达式中还具有另外一种较为独特的专用字符,即定位符。定位符用于规定匹配模式在目标对象中的出现位置。

  较为常用的定位符包括: “^”, “$”, “b” 以及 “B”。其中,“^”定位符规定匹配模式必须出现在目标字符串的开头,“$”定位符规定匹配模式必须出现在目标对象的结尾,b定位符规定匹配模式必须出现在目标字符串的开头或结尾的两个边界之一,而“B”定位符则规定匹配对象必须位于目标字符串的开头和结尾两个边界之内,即匹配对象既不能作为目标字符串的开头,也不能作为目标字符串的结尾。同样,我们也可以把“^”和“$”以及“b”和“B”看作是互为逆运算的两组定位符。举例来说:

  /^hell/

  因为上述正则表达式中包含“^”定位符,所以可以与目标对象中以 “hell”, “hello”或 “hellhound”开头的字符串相匹配。

  /ar$/

  因为上述正则表达式中包含“$”定位符,所以可以与目标对象中以 “car”, “bar”或 “ar” 结尾的字符串相匹配。

  /bbom/

  因为上述正则表达式模式以“b”定位符开头,所以可以与目标对象中以 “bomb”, 或 “bom”开头的字符串相匹配。

  /manb/

  因为上述正则表达式模式以“b”定位符结尾,所以可以与目标对象中以 “human”, “woman”或 “man”结尾的字符串相匹配。

  为了能够方便用户更加灵活的设定匹配模式,正则表达式允许使用者在匹配模式中指定某一个范围而不局限于具体的字符。例如:

  /[A-Z]/

  上述正则表达式将会与从A到Z范围内任何一个大写字母相匹配。

  /[a-z]/

  上述正则表达式将会与从a到z范围内任何一个小写字母相匹配。

  /[0-9]/

  上述正则表达式将会与从0到9范围内任何一个数字相匹配。

  /([a-z][A-Z][0-9])+/

  上述正则表达式将会与任何由字母和数字组成的字符串,如 “aB0” 等相匹配。这里需要提醒用户注意的一点就是可以在正则表达式中使用 “()” 把字符串组合在一起。“()”符号包含的内容必须同时出现在目标对象中。因此,上述正则表达式将无法与诸如 “abc”等的字符串匹配,因为“abc”中的最后一个字符为字母而非数字。

  如果我们希望在正则表达式中实现类似编程逻辑中的“或”运算,在多个不同的模式中任选一个进行匹配的话,可以使用管道符 “|”。例如:

  /to|too|2/

  上述正则表达式将会与目标对象中的 “to”, “too”, 或 “2” 相匹配。

  正则表达式中还有一个较为常用的运算符,即否定符 “[^]”。与我们前文所介绍的定位符 “^” 不同,否定符 “[^]”规定目标对象中不能存在模式中所规定的字符串。例如:

  /[^A-C]/

  上述字符串将会与目标对象中除A,B,和C之外的任何字符相匹配。一般来说,当“^”出现在 “[]”内时就被视做否定运算符;而当“^”位于“[]”之外,或没有“[]”时,则应当被视做定位符。

  最后,当用户需要在正则表达式的模式中加入元字符,并查找其匹配对象时,可以使用转义符“”。例如:

  /Th*/

  上述正则表达式将会与目标对象中的“Th*”而非“The”等相匹配。

  使用实例

  在对正则表达式有了较为全面的了解之后,我们就来看一下如何在Perl,PHP,以及JavaScript中使用正则表达式。

  通常,Perl中正则表达式的使用格式如下:

  operator / regular-expression / string-to-replace / modifiers

  运算符一项可以是m或s,分别代表匹配运算和替换运算。

  其中,正则表达式一项是将要进行匹配或替换操作的模式,可以由任意字符,元字符,或定位符等组成。替换字符串一项是使用s运算符时,对查找到的模式匹配对象进行替换的字符串。最后的参数项用来控制不同的匹配或替换方式。例如:

  s/geed/good/

  将会在目标对象中查找第一个出现的geed字串,并将其替换为good。如果我们希望在目标对象的全局范围内执行多次查找—替换操作的话,可以使用参数 “g”,即s/love/lust/g。

  此外,如果我们不需要限制匹配的大小写形式的话,可以使用参数 “i ”。例如,

  m/JewEL/i

  上述正则表达式将会与目标对象中的jewel,Jewel,或JEWEL相匹配。

  在Perl中,使用专门的运算符“=~”指定正则表达式的匹配对象。例如:

  $flag =~ s/abc/ABC/

  上述正则表达式将会把变量$flag中的字串abc替换为ABC。

  下面,我们就在Perl程序中加入正则表达式,验证用户邮件地址格式的有效性。代码如下:

  #!/usr/bin/perl

  # get input

  print “What's your email address?n”;

  $email =

  chomp($email);

  # match and display result

  if($email =~ /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/)

  {

  print(“Your email address is correct!n”);

  }

  else

  {

  print(“Please try again!n”);

  }

  如果用户更偏爱PHP的话,可以使用ereg()函数进行模式匹配操作。ereg()函数的使用格式如下:

  ereg(pattern, string)

  其中,pattern代表正则表达式的模式,而string则是执行查找替换操作的目标对象。同样是验证邮件地址,使用PHP编写的程序代码如下:

  

  if (ereg(“^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+”,$email))

  { echo “Your email address is correct!”;}

  else

  { echo “Please try again!”;}

  ?>

  最后,我们在来看一下JavaScript。JavaScript 1.2中带有一个功能强大的RegExp()对象,可以用来进行正则表达式的匹配操作。其中的test()方法可以检验目标对象中是否包含匹配模式,并相应的返回true或false。

  我们可以使用JavaScript编写以


版权声明:本文由澳门金莎娱乐发布于关于澳门金莎,转载请注明出处:使用正则表达式,身份证正则表达式