有些新手对正则表达式不是很熟悉,有必要在此作一简单回顾。如果你是正则表达式高手,可以不用看这一部分。
正则表达式是描述字符串集的字符串。例如,正则表达式“Mic*”描述所有包含“Mic”,后跟零个或多个字符的字符串。Mickey、Microsoft、Michelangelo 或 Mic 本身都是例子。句号“.”匹配任何字符,“+”类似“*”,但至少要一个字符,所以“Mic+”匹配前述所有除“Mic”以外的串。[a-z]指一个匹配范围,所以[a-zA-Z_0-9]匹配字母、数字或下划线。Regex 称之为单词字符,可以将它写成“\w”。所以“\w+”匹配至少有一个字符的单词字符序列——换句话说,叫 C 符号(C tokens)。那么这样一来,几乎所有的C 符号都不能以数字开头,因此,下面这个正则表达式是正确的:“^[a-zA-Z_]\w*$”。专用字符“^”意思是“以...开始”(除非它位于某个范围之内,这时它的意思是“非”),“$”意思是“结尾”,那么“^[a-zA-Z_]\w*$”意思就是:以字母或下划线开始的字母、数字或下划线字符串。
正则表达式在对输入进行有效性验证时非常有用。\d 匹配数字,{n}匹配重复n次,于是 ^5\d{15}$ 匹配5开头的16位数字,也即是说 MasterCard 信用卡号码。那 ^[45]\d{15}$ 就是Visa 卡号,它以4开头。你可以用大括弧对表达式进行分组,下面是个测试。这个表达式描述的是什么呢?^\d{5}(-\d{4}){0,1}$
提示:{0,1} 意思是重复0次或1次(可以缩写成问号 ?)。想出来了吗?该表达式意思是:五个数字后重复0次或1次(破折号后跟四个数字)。它匹配 02142和98007-4235,但不匹配 3245 或 2345-98761。这也就是美国的邮政编码。大括弧将 ZIP+4 部分分组,所以{0,1}修饰符将应用于整个分组。
以上我仅浅尝即止地说明了正则表达式能做什么。我还没提到替换,由于我没有具体资料,所以不敢描述在 Unicode 中会怎么样。但你能感觉到正则表达式有多么强大。多年来它们乃 UNIX 的中流砥柱,并且在Web 编程和 Perl 这样的语言中更臻完善,其对 HTML 的操作几乎完全是对文本的处理。正则表达式在 Windows 中一直没有得到充分使用,直到 .NET 框架面世,它才正式成为 Windows 家族的一员。
框架 Regex 类
.NET 框架用 Regex 类实现正则表达式,并有三个支持类:Match、Group 和 Capture (参见 Figure A)。典型情况下,你创建 Regex 并用输入串调用 Regex::Match 来获得第一个 Match,或用 Regex::Matches 来获取所有匹配:
Regex *r = new Regex("\b\w+\b");
MatchCollection* mc =
r->Matches("abc ,_foo ,<& mumble7");
for (int i=0; iCount; i++) {
Match *m = mc->Index(i);
Console.WriteLine(m->Value);
}
这将显示“abc”,“foo”和“mumble7”,每个匹配在一行。这个例子引入了一个专门的字符 \b,所谓锚或原子零宽度断言,就像 ^(开始)和$(结尾)。\b 指定某个单词的边界,所以“\b\w+\b”意思是用单词分隔的一个或多个单词字符。
Figure ARegex 类
正则表达式中的每个括弧表达式都构成一个 Group。Regex::Groups 返回作为集合的 Groups,它决不会是空,因为整个正则表达式本身即是一组。Groups 很重要,因为它们使你进行逻辑 OR 匹配,如“(ying|yong)”,它们使你将限定符应用到子表达式,并让你吸取匹配的单独部分。正文的 Figure 1 中我的 RegexTest 程序运行后用邮编为例显示分组。
在所有函数中最强大的函数要数 Regex::Replace,它使得正则表达式的威力惊人地强大。和许多开发人员一样,过去在多次传递字符串到多行编辑控件之前,我常常不得不手工将 “\n” 转换为“\r\n”,但使用 Regex::Replace,这个操作简直易如反掌。
s = Regex::Replace(s,"\n","\r\n");
Regex::Match 和 Replace 具备静态重载,所以你可以不用创建对象,以快速使用正则表达式。我最喜欢的 Regex::Replace 重载之一是带有一个委托参数,使你能用过程代码动态计算替换文本——参见正文中那个有趣的例子。
一些警告:每一种正则表达式的实现是有不太一样的。例如,在 Perl 中,{,1}是{0,1}的速记版,而微软的老大们不是那样做的。要当心一些微小的差别。权威的 .NET Regex 资料请参考 MSDN 库中的 “Regular Expressions as a Language”。
字符描述:
^ :匹配输入的开始位置。\:将下一个字符标记为特殊字符或字面值。
* :匹配前一个字符零次或几次。
+ :匹配前一个字符一次或多次。
(pattern) 与模式匹配并记住匹配。
x|y:匹配 x 或 y。
[a-z] :表示某个范围内的字符。与指定区间内的任何字符匹配。
\w :与任何单词字符匹配,包括下划线。
{n,m} 最少匹配 n 次且最多匹配 m 次
$ :匹配输入的结尾。
邮箱:
正则匹配表达式:/^[a-z]([a-z0-9]*[-_]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,3}([\.][a-z]{2})?$/i
国际域名格式如下:域名由各国文字的特定字符集、英文字母、数字及“-”(即连字符或减号)任意组合而成, 但开头及结尾均不能含有“-”,“-”不能连续出现 。 域名中字母不分大小写。域名最长可达60个字节(包括后缀.com、.net、.org等)。
说明:
①/内容/i 构成一个不区分大小写的正则表达式;^ 匹配开始;$ 匹配结束。
②[a-z] E-Mail前缀必需是一个英文字母开头
③([a-z0-9]*[-_]?[a-z0-9]+)* 和_a_2、aaa11、_1_a_2匹配,和a1_、aaff_33a_、a__aa不匹配,如果是空字符,也是匹配的,*表示0个或者多个。
④*表示0个或多个前面的字符.
⑤[a-z0-9]* 匹配0个或多个英文字母或者数字;[-_]? 匹配0个或1“-”,因为“-”不能连续出现。
⑥[a-z0-9]+ 匹配1个或多个英文字母或者数字,因为“-”不能做为结尾
⑦@ 必需有个有@
⑧([a-z0-9]*[-_]?[a-z0-9]+)+ 见上面([a-z0-9]*[-_]?[a-z0-9]+)*解释,但是不能为空,+表示一个或者为多个。
⑨[\.] 将特殊字符(.)当成普通字符;[a-z]{2,3} 匹配2个至3个英文字母,一般为com或者net等。
⑩([\.][a-z]{2})? 匹配0个或者1个[\.][a-z]{2}(比如.cn等) 我不知道一般.com.cn最后部份是不是都是两位的,如果不是请修改{2}为{起始字数,结束字数}
转自:http://blog.csdn.net/sunboy_2050/article/details/4962509
目前,正则表达式已经在很多软件中得到广泛的应用,包括*nix(Linux, Unix等),HP等操作系统,PHP,C#,Java等开发环境,以及很多的应用软件中,都可以看到正则表达式的影子。
正则表达式的使用,可以通过简单的办法来实现强大的功能。为了简单有效而又不失强大,造成了正则表达式代码的难度较大,学习起来也不是很容易,所以需要付出一些努力才行,入门之后参照一定的参考,使用起来还是比较简单有效的。
正则表达式可以:
1. 测试字符串的某个模式,例如可以对一个输入字符串进行测试,看该字符串是否存在一个电话号码的模式,这称为数据有效性验证
2. 替换文本,可以在文档中使用一个正则表达式来标识特定文字,然后可以全部将其删除,或者替换为别的文字
3. 根据模式匹配从字符串中提取一个子字符串,可以用来在文本或输入字段中查找特定文字
正则表达式的常用字符及其含义
正则表达式字符 | 描述 |
[……] | 匹配括号中的任何一个字符 |
[^……] | 匹配不在括号中的任何一个字符(^为取反符) |
/w | 匹配任何一个字符(a~z、A~Z和0~9) |
/W | 匹配任何一个空白字符 |
/s | 匹配任何一个非空白字符 |
/S | 与任何非单词字符匹配 |
/d | 匹配任何一个数字(0~9) |
/D | 匹配任何一个非数字(^0~9) |
[/b] | 匹配一个退格键字母 |
{n,m} | 最少匹配前面表达式n次,最大为m次(n-m次数范围) |
{n,} | 最少匹配前面表达式n次(上限不定) |
{n} | 恰恰匹配前面表达式为n次 |
? | 匹配前面表达式0或1次,即{0,1} |
+ | 至少匹配前面表达式1次,即{1,} |
* | 至少匹配前面表达式0次,即{0,} |
| | 匹配前面表达式或后面表达式(逻辑或) |
(…) | 在单元中组合项目 |
^ | 匹配字符串的开头 |
$ | 匹配字符串的结尾 |
/b | 匹配字符边界 |
/B | 匹配非字符边界的某个位置 |
几个常用的正则表达式
- /w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*:验证电子邮件:
- HTTP:///S+/./S+:验证网址:
- /d{6}:验证邮政编码:
- [0-9]:表示0~9十个数字。
- /d*:表示任意个数字。
- /d{3,4}-/d{7,8}:表示中国大陆的固定电话号码。
- /d{2}-/d{5}:验证由两位数字、一个连字符再加5位数字组成的ID号。
- </s*(/S+)(/s[^>]*)?>[/s/S]*</s*///l/s*>:匹配HTML标记。
- /d{17}[/d|X]|/d{15}:身份证
字符描述:
/:将下一个字符标记为特殊字符或字面值。例如"n"与字符"n"匹配。"/n"与换行符匹配。序列"//"与"/"匹配,"/("与"("匹配。
^ :匹配输入的开始位置。
$ :匹配输入的结尾。
* :匹配前一个字符零次或几次。例如,"zo*"可以匹配"zo"、"zoo"。
+ :匹配前一个字符一次或多次。例如,"zo+"可以匹配"zoo",但不匹配"z"。
? :匹配前一个字符零次或一次。例如,"n?ve?"可以匹配"never"中的"ve"。
.:匹配换行符以外的任何字符。
(pattern) 与模式匹配并记住匹配。匹配的子字符串可以从作为结果的
Matches 集合中使用 Item [0]...[n]取得。如果要匹配括号字符(和 ),可使用"/(" 或 "/)"。
x|y:匹配 x 或 y。例如 "z|food" 可匹配 "z" 或 "food"。"(z|f)ood" 匹配 "zood" 或 "food"。
{n}:n 为非负的整数,匹配恰好n次。例如,"o{2}" 不能与 "Bob 中的 "o" 匹配,但是可以与"foooood"中的前两个o匹配。
{n,} :n 为非负的整数,匹配至少n次。例如,"o{2,}"匹配"foooood"中所有的o,"o{1,}"等价于"o+";"o{0,}"等价于"o*"。
{n,m} :m 和 n 为非负的整数。匹配至少 n 次,至多 m 次。例如,"o{1,3}" 匹配 "fooooood"中前三个o,"o{0,1}"等价于"o?"。
[xyz] :一个字符集,与括号中字符的其中之一匹配。例如,"[abc]" 匹配"plain"中的"a"。
[^xyz] :一个否定的字符集,匹配不在此括号中的任何字符。例如,"[^abc]" 可以匹配"plain"中的"p".
[a-z] :表示某个范围内的字符,与指定区间内的任何字符匹配。例如,"[a-z]"匹配"a"与"z"之间的任何一个小写字母字符。
[^m-z] :否定的字符区间,与不在指定区间内的字符匹配。例如,"[m-z]"与不在"m"到"z"之间的任何字符匹配。
/b :与单词的边界匹配,即单词与空格之间的位置。例如,"er/b" 与"never"中的"er"匹配,但是不匹配"verb"中的"er"。
/B :与非单词边界匹配,"ea*r/B"与"never early"中的"ear"匹配。
/d :与一个数字字符匹配,等价于[0-9]。
/D :与非数字的字符匹配,等价于[^0-9]。
/f :与分页符匹配。
/n :与换行符字符匹配。
/r :与回车字符匹配。
/s :与任何白字符匹配,包括空格、制表符、分页符等。等价于"[ /f/n/r/t/v]"。
/S :与任何非空白的字符匹配,等价于"[^ /f/n/r/t/v]"。
/t :与制表符匹配。
/v :与垂直制表符匹配。
/w :与任何单词字符匹配,包括下划线。等价于"[A-Za-z0-9_]"。
/W :与任何非单词字符匹配,等价于"[^A-Za-z0-9_]"。
/num :匹配 num个,其中 num 为一个正整数,引用回到记住的匹配。例如,"(.)/1"匹配两个连续的相同的字符。
/n:匹配 n,其中n 是一个八进制换码值。八进制换码值必须是 1, 2 或 3 个数字长。
例如,"/11" 和 "/011" 都与一个制表符匹配。"/0011"等价于"/001" 与 "1"。八进制换码值不得超过 256。否则,只有前两个字符被视为表达式的一部分。允许在正则表达式中使用ASCII码。
/xn:匹配n,其中n是一个十六进制的换码值。十六进制换码值必须恰好为两个数字长。例如,"/x41"匹配"A"。"/x041"等价于"/x04" 和 "1"。允许在正则表达式中使用 ASCII 码。
好了,现在我们就举个例子来说明正则表达式的使用,以验证邮件。例如我们输入:test@yesky.com,当然我也会这样输入:xxx@yyy.com.cn;但是这样的则是非法,如:xxx@@com.cn或者@xxx.com.cn,等等,所以我们得归纳出合法的电子邮件地址应满足的条件:
1. 必须包含一个并且只有一个符号“@”
2. 第一个字符不得是“@”或者“.”
3. 不允许出现“@.”或者.@
4. 结尾不得是字符“@”或者“.”
根据以上的原则,我们就可以得到如下的模板: "^/w+((-/w+)|(/./w+))*/@[A-Za-z0-9]+((/.|-)[A-Za-z0-9]+)*/.[A-Za-z0-9]+$"
接着,我们对其改进,可以得到这样的模板格式:"/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*"
正则表达式的常见用法
"^/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
只能输入1个数字 | |
表达式 | ^/d$ |
描述 | 匹配一个数字(^起始符,$结束符,下同) |
匹配的例子 | 0,1,2,3 |
不匹配的例子 |
只能输入n个数字 | |
表达式 | ^/d{n}$ 例如^/d{8}$ |
描述 | 匹配8个数字 |
匹配的例子 | 12345678,22223334,12344321 |
不匹配的例子 |
只能输入至少n个数字 | |
表达式 | ^/d{n,}$ 例如^/d{8,}$ |
描述 | 匹配最少n个数字 |
匹配的例子 | 12345678,123456789,12344321 |
不匹配的例子 |
只能输入m到n个数字 | |
表达式 | ^/d{m,n}$ 例如^/d{7,8}$ |
描述 | 匹配m到n个数字 |
匹配的例子 | 12345678,1234567 |
不匹配的例子 | 123456,123456789 |
只能输入数字 | |
表达式 | ^[0-9]*$ |
描述 | 匹配任意个数字 |
匹配的例子 | 12345678,1234567 |
不匹配的例子 | E,清清月儿,http://blog.csdn.net/21aspnet |
只能输入某个区间数字 | |
表达式 | ^[12-15]$ |
描述 | 匹配某个区间的数字 |
匹配的例子 | 12,13,14,15 |
不匹配的例子 |
只能输入0和非0打头的数字 | |
表达式 | ^(0|[1-9][0-9]*)$ |
描述 | 可以为0,第一个数字不能为0,数字中可以有0 |
匹配的例子 | 12,10,101,100 |
不匹配的例子 | 01,清清月儿,http://blog.csdn.net/21aspnet |
只能输入实数 | |
表达式 | ^[-+]?/d+(/./d+)?$ |
描述 | 匹配实数 |
匹配的例子 | 18,+3.14,-9.90 |
不匹配的例子 | .6,33s,67-99 |
只能输入n位小数的正实数 | |
表达式 | ^[0-9]+(.[0-9]{n})?$以^[0-9]+(.[0-9]{2})?$为例 |
描述 | 匹配n位小数的正实数 |
匹配的例子 | 2.22 |
不匹配的例子 | 2.222,-2.22,http://blog.csdn.net/21aspnet |
只能输入m-n位小数的正实数 | |
表达式 | ^[0-9]+(.[0-9]{m,n})?$以^[0-9]+(.[0-9]{1,2})?$为例 |
描述 | 匹配m到n位小数的正实数 |
匹配的例子 | 2.22,2.2 |
不匹配的例子 | 2.222,-2.2222,http://blog.csdn.net/21aspnet |
只能输入非0的正整数 | |
表达式 | ^/+?[1-9][0-9]*$ |
描述 | 匹配非0的正整数 |
匹配的例子 | 2,23,234 |
不匹配的例子 | 0,-4, |
只能输入非0的负整数 | |
表达式 | ^/-[1-9][0-9]*$ |
描述 | 匹配非0的负整数 |
匹配的例子 | -2,-23,-234 |
不匹配的例子 | 0,4, |
只能输入n个字符 | |
表达式 | ^.{n}$ 以^.{4}$为例 |
描述 | 匹配n个字符,注意汉字只算1个字符 |
匹配的例子 | 1234,12we,123清,清清月儿 |
不匹配的例子 | 0,123,123www,http://blog.csdn.net/21aspnet/ |
只能输入英文字符 | |
表达式 | ^.[A-Za-z]+$为例 |
描述 | 匹配英文字符,大小写任意 |
匹配的例子 | Asp,WWW, |
不匹配的例子 | 0,123,123www,http://blog.csdn.net/21aspnet/ |
只能输入大写英文字符 | |
表达式 | ^.[A-Z]+$为例 |
描述 | 匹配英文大写字符 |
匹配的例子 | NET,WWW, |
不匹配的例子 | 0,123,123www, |
只能输入小写英文字符 | |
表达式 | ^.[a-z]+$为例 |
描述 | 匹配英文大写字符 |
匹配的例子 | asp,csdn |
不匹配的例子 | 0,NET,WWW, |
只能输入英文字符+数字 | |
表达式 | ^.[A-Za-z0-9]+$为例 |
描述 | 匹配英文字符+数字 |
匹配的例子 | 1Asp,W1W1W, |
不匹配的例子 | 0,123,123,www,http://blog.csdn.net/21aspnet/ |
只能输入英文字符/数字/下划线 | |
表达式 | ^/w+$为例 |
描述 | 匹配英文字符或数字或下划线 |
匹配的例子 | 1Asp,WWW,12,1_w |
不匹配的例子 | 3#,2-4,w#$,http://blog.csdn.net/21aspnet/ |
密码举例 | |
表达式 | ^.[a-zA-Z] /w{m,n}$ |
描述 | 匹配英文字符开头的m-n位字符且只能数字字母或下划线 |
匹配的例子 | |
不匹配的例子 |
验证首字母大写 | |
表达式 | /b[^/Wa-z0-9_][^/WA-Z0-9_]*/b |
描述 | 首字母只能大写 |
匹配的例子 | Asp,Net |
不匹配的例子 | http://blog.csdn.net/21aspnet/ |
验证网址(带?id=中文)VS.NET2005无此功能 | |
表达式 | ^http:([/w-]+(/.[/w-]+)+(//[/w- .///?%&=/u4e00-/u9fa5]*)?)?$ |
描述 | 验证带?id=中文 |
匹配的例子 | http://blog.csdn.net/21aspnet/ , http://blog.csdn.net?id=清清月儿 |
不匹配的例子 |
验证汉字 | |
表达式 | ^[/u4e00-/u9fa5]{0,}$ |
描述 | 只能汉字 |
匹配的例子 | 清清月儿 |
不匹配的例子 | http://blog.csdn.net/21aspnet/ |
验证QQ号 | |
表达式 | [0-9]{5,9} |
描述 | 5-9位的QQ号 |
匹配的例子 | 10000,123456 |
不匹配的例子 | 10000w,http://blog.csdn.net/21aspnet/ |
验证电子邮件(验证MSN号一样) | |
表达式 | /w+([-+.']/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)* |
描述 | 注意MSN用非hotmail.com邮箱也可以 |
匹配的例子 | aaa@msn.com |
不匹配的例子 | 111@1. http://blog.csdn.net/21aspnet/ |
验证身份证号(粗验,最好服务器端调类库再细验证) | |
表达式 | ^[1-9]([0-9]{16}|[0-9]{13})[xX0-9]$ |
描述 | |
匹配的例子 | 15或者18位的身份证号,支持带X的 |
不匹配的例子 | http://blog.csdn.net/21aspnet/ |
验证手机号(包含159,不包含小灵通) | |
表达式 | ^13[0-9]{1}[0-9]{8}|^15[9]{1}[0-9]{8} |
描述 | 包含159的手机号130-139 |
匹配的例子 | 139XXXXXXXX |
不匹配的例子 | 140XXXXXXXX,http://blog.csdn.net/21aspnet/ |
验证电话号码号(很复杂,VS.NET2005给的是错的) | |
表达式(不完美 ) | 方案一 ((/(/d{3}/)|/d{3}-)|(/(/d{4}/)|/d{4}-))?(/d{8}|/d{7}) 方案二 (^[0-9]{3,4}/-[0-9]{3,8}$)|(^[0-9]{3,8}$)|(^/([0-9]{3,4}/)[0-9]{3,8}$)|(^0{0,1}13[0-9]{9}$) 支持手机号但也不完美 |
描述 | 上海:02112345678 3+8位 |
匹配的例子 | |
不匹配的例子 |
验证护照 | |
表达式 | (P/d{7})|G/d{8}) |
描述 | 验证P+7个数字和G+8个数字 |
匹配的例子 | |
不匹配的例子 | 清清月儿, http://blog.csdn.net/21aspnet/ |
验证IP | |
表达式 | ^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])/.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)/.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)/.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$ |
描述 | 验证IP |
匹配的例子 | 192.168.0.1 222.234.1.4 |
不匹配的例子 |
验证域 | |
表达式 | ^[a-zA-Z0-9]+([a-zA-Z0-9/-/.]+)?/.(com|org|net|cn|com.cn|edu.cn|grv.cn|)$ |
描述 | 验证域 |
匹配的例子 | csdn.net baidu.com it.com.cn |
不匹配的例子 | 192.168.0.1 |
验证信用卡 | |
表达式 | ^((?:4/d{3})|(?:5[1-5]/d{2})|(?:6011)|(?:3[68]/d{2})|(?:30[012345]/d))[ -]?(/d{4})[ -]?(/d{4})[ -]?(/d{4}|3[4,7]/d{13})$ |
描述 | 验证VISA卡,万事达卡,Discover卡,美国运通卡 |
匹配的例子 | |
不匹配的例子 |
验证ISBN 国际标准书号 | |
表达式 | ^(/d[- ]*){9}[/dxX]$ |
描述 | 验证ISBN国际标准书号 |
匹配的例子 | 7-111-19947-2 |
不匹配的例子 |
验证GUID 全球唯一标识符 | |
表达式 | ^[A-Z0-9]{8}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{12}$ |
描述 | 格式8-4-4-4-12 |
匹配的例子 | 2064d355-c0b9-41d8-9ef7-9d8b26524751 |
不匹配的例子 |
验证文件路径和扩展名 | |
表达式 | ^([a-zA-Z]/:|//)//([^//]+//)*[^//:*?"<>|]+/.txt(l)?$ |
描述 | 检查路径和文件扩展名 |
匹配的例子 | E:/mo.txt |
不匹配的例子 | E:/ , mo.doc, E:/mo.doc ,http://blog.csdn.net/21aspnet/ |
验证Html颜色值 | |
表达式 | ^#?([a-f]|[A-F]|[0-9]){3}(([a-f]|[A-F]|[0-9]){3})?$ |
描述 | 检查颜色取值 |
匹配的例子 | #FF0000 |
不匹配的例子 | http://blog.csdn.net/21aspnet |
邮件地址最基本的格式可以看作是 <用户名@域名>。对于用户名,各个ISP没有统一的标准,除了数字和字母外,有的允许有<_>,有的允许有<.>,也有的两者皆可,或者允许其他的特殊字符。对此我们只能根据具体的情况加以判断。
文中假设除字母和数字外还允许<.><_>,<.><_>不能出现在首末位,<.><_>不能相连。域名中各段除数字和字母外只允许出现<->,且<->不能出现在首位和末位,各段用<.>连接。我们还可从域名得知最后一段大于一位且只有字母。
下面我们就可以依据以上假设写出如下表达式来判断是否该串是一个邮件地址:
^([a-z0-9A-Z]+[-|/.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?/.)+[a-zA-Z]{2,}$
稍作解释:
^:匹配开始
([a-z0-9A-Z]+[-|/.]?)+:数字或字母>1位 + <->或<.>,以上组合重复1次以上
[a-z0-9A-Z]:用户名以数字或字母结尾
@:匹配<@>
(
[a-z0-9A-Z]+:匹配多位数字或字母
(-[a-z0-9A-Z]+)?:匹配 -加多位数字或字母 0次或1次
/.:匹配<.>
)+:匹配括号中内容多次
[a-zA-Z]{2,}:匹配字母2次以上
$:匹配结尾