正则表达式学习

1.入门

 查找  hi  

 使用  \bhi\b

\b是正则表达式规定的一个特殊代码(好吧,某些人叫它元字符,metacharacter),代表着单词的开头或结尾,也就是单词的分界处。虽然通常英文的单词是由空格,标点符号或者换行来分隔的,但是\b并不匹配这些单词分隔字符中的任何一个,它只匹配一个位置

总结:/b  就是单词分割符号


查找  hi Lucy

使用\bhi\b.*\bLucy\b

.*连在一起就意味着任意数量的不包含换行的字符。现在\bhi\b.*\bLucy\b的意思就很明显了:先是一个单词hi,然后是任意个任意字符(但不能是换行),最后是Lucy这个单词

 总结: .*  表示不换行的任意字符


查找  032-88888888    (电话号码) 

使用 0\d{2}-\d{8}

这里的 \d 是个新的元字符,匹配 一位数字(0,或1,或2,或……) 这里\d后面的{2}({8})的意思是前面\d必须连续重复匹配2次(8次)

总结: 区别:\d 和 \b ,  简单理解\b(black)分开,分割。 X{2}表示X必须重复的2次数。 {2, 5}表示最少重复2次,最多5次。



\s匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等\w匹配字母或数字或下划线或汉字等

\ba\w*\b匹配以字母a开头的单词——先是某个单词开始处(\b),然后是字母a,然后是任意数量的字母或数字(\w*),最后是单词结束处(\b)

好吧,现在我们说说正则表达式里的单词是什么意思吧:就是不少于一个的连续的\w。不错,这与学习英文时要背的成千上万个同名的东西的确关系不大 :)

\d+匹配1个或更多连续的数字。这里的+是和*类似的元字符,不同的是*匹配重复任意次(可能是0次),而+则匹配重复1次或更多次

\b\w{6}\b 匹配刚好6个字符的单词


表1.常用的元字符
代码 说明
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束


查找:5-12位数字

使用:^\d{5,12}$

这和\b有点类似。^匹配你要用来查找的字符串的开头,$匹配结尾。这和\b有点类似。^匹配你要用来查找的字符串的开头,$匹配结尾。

^$,所以输入的整个字符串都要用来和\d{5,12}来匹配,也就是说整个输入必须是5到12个数字


字符转义

例如: deerchao\.net 匹配 deerchao.net C:\\Windows 匹配 C:\Windows


重复

前面的 * , + , {2} , {5,12} 这几个匹配重复的方式了,下面是正则表达式中所有的限定符(指定数量的代码,例如*,{5,12}等):

表2.常用的限定符
代码/语法 说明
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次

字符类

如果你想匹配没有预定义元字符的字符集合(比如元音字母a,e,i,o,u),应该怎么办?

很简单,你只需要在方括号里列出它们就行了

列如: [aeiou] 就匹配 任何一个英文元音字母 [.?!] 匹配 标点符号(.或?或!)


指定一个字符范围 (注意:是一个字符)[0-9]代表的含意与\d就是完全一致的:一位数字同理[a-z0-9A-Z_]也完全等同于\w(如果只考虑英文的话)。

例如:\(?0\d{2}[) -]?\d{8}

(010)88886666,或022-22334455,或02912345678等。我们对它进行一些分析吧:首先是一个转义字符\(,它能出现0次或1次(?),然后是一个0,后面跟着2个数字(\d{2}),然后是)-空格中的一个,它出现1次或不出现(?),最后是8个数字(\d{8})。

分枝条件

具体方法是用|把不同的规则分隔开,看例子:

0\d{2}-\d{8}|0\d{3}-\d{7}这个表达式能匹配两种以连字号分隔的电话号码:一种是三位区号,8位本地号(如010-12345678),一种是4位区号,7位本地号(0376-2233445)

分组

(\d{1,3}\.){3}\d{1,3}是一个简单的IP地址匹配表达式。要理解这个表达式,请按下列顺序分析它:\d{1,3}匹配1到3位的数字(\d{1,3}\.){3}匹配三位数字加上一个英文句号(这个整体也就是这个分组)重复3次,最后再加上一个一到三位的数字(\d{1,3})。

IP地址中每个数字都不能大于255. 经常有人问我, 01.02.03.04 这样前面带有0的数字, 是不是正确的IP地址呢? 答案是: 是的, IP 地址里的数字可以包含有前导 0 (leading zeroes).

不幸的是,它也将匹配256.300.888.999这种不可能存在的IP地址。如果能使用算术比较的话,或许能简单地解决这个问题,但是正则表达式中并不提供关于数学的任何功能,所以只能使用冗长的分组,选择,字符类来描述一个正确的IP地址:((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)

反义

表3.常用的反义代码
代码/语法 说明
\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou这几个字母以外的任意字符

例子:\S+匹配不包含空白符的字符串

]+>匹配用尖括号括起来的以a开头的字符串

总结: 大小写不同,意思不一样;\w  ,  \W

处理选项

表6.常用的处理选项
名称 说明
IgnoreCase(忽略大小写) 匹配时不区分大小写。
Multiline(多行模式) 更改^$的含义,使它们分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。(在此模式下,$的精确含意是:匹配\n之前的位置以及字符串结束前的位置.) 
Singleline(单行模式) 更改.的含义,使它与每一个字符匹配(包括换行符\n)。 
IgnorePatternWhitespace(忽略空白) 忽略表达式中的非转义空白并启用由#标记的注释。
ExplicitCapture(显式捕获) 仅捕获已被显式命名的组。

一个经常被问到的问题是:是不是只能同时使用多行模式和单行模式中的一种?答案是:不是。这两个选项之间没有任何关系,除了它们的名字比较相似(以至于让人感到疑惑)以外。

最后

表7.尚未详细讨论的语法
代码/语法 说明
\a 报警字符(打印它的效果是电脑嘀一声)
\b 通常是单词分界位置,但如果在字符类里使用代表退格
\t 制表符,Tab
\r 回车
\v 竖向制表符
\f 换页符
\n 换行符
\e Escape
\0nn ASCII代码中八进制代码为nn的字符
\xnn ASCII代码中十六进制代码为nn的字符
\unnnn Unicode代码中十六进制代码为nnnn的字符
\cN ASCII控制字符。比如\cC代表Ctrl+C
\A 字符串开头(类似^,但不受处理多行选项的影响)
\Z 字符串结尾或行尾(不受处理多行选项的影响)
\z 字符串结尾(类似$,但不受处理多行选项的影响)
\G 当前搜索的开头
\p{name} Unicode中命名为name的字符类,例如\p{IsGreek}
(?>exp) 贪婪子表达式
(?-exp) 平衡组
(?im-nsx:exp) 在子表达式exp中改变处理选项
(?im-nsx) 为表达式后面的部分改变处理选项
(?(exp)yes|no) 把exp当作零宽正向先行断言,如果在这个位置能匹配,使用yes作为此组的表达式;否则使用no
(?(exp)yes) 同上,只是使用空表达式作为no
(?(name)yes|no) 如果命名为name的组捕获到了内容,使用yes作为表达式;否则使用no
(?(name)yes) 同上,只是使用空表达式作为no



要学好正则的小伙伴,强烈推荐: 正则表达式30分钟入门教程

说 明:正则表达式通常用于两种任务:1.验证,2.搜索/替换。用于验证时,通常需要在前后分别加上^和$,以匹配整个待验证字符串;搜索/替换时是否加上 此限定则根据搜索的要求而定,此外,也有可能要在前后加上\b而不是^和$。此表所列的常用正则表达式,除个别外均未在前后加上任何限定,请根据需要,自 行处理。

说明 正则表达式
网址(URL) [a-zA-z]+://[^\s]*
IP地址(IP Address) ((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
电子邮件(Email) \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
QQ号码 [1-9]\d{4,}
HTML标记(包含内容或自闭合) <(.*)(.*)>.*<\/\1>|<(.*) \/>
密码(由数字/大写字母/小写字母/标点符号组成,四种都必有,8位以上) (?=^.{8,}$)(?=.*\d)(?=.*\W+)(?=.*[A-Z])(?=.*[a-z])(?!.*\n).*$
日期(年-月-日) (\d{4}|\d{2})-((1[0-2])|(0?[1-9]))-(([12][0-9])|(3[01])|(0?[1-9]))
日期(月/日/年) ((1[0-2])|(0?[1-9]))/(([12][0-9])|(3[01])|(0?[1-9]))/(\d{4}|\d{2})
时间(小时:分钟, 24小时制) ((1|0?)[0-9]|2[0-3]):([0-5][0-9])
汉字(字符) [\u4e00-\u9fa5]
中文及全角标点符号(字符) [\u3000-\u301e\ufe10-\ufe19\ufe30-\ufe44\ufe50-\ufe6b\uff01-\uffee]
中国大陆固定电话号码 (\d{4}-|\d{3}-)?(\d{8}|\d{7})
中国大陆手机号码 1\d{10}
中国大陆邮政编码 [1-9]\d{5}
中国大陆身份证号(15位或18位) \d{15}(\d\d[0-9xX])?
非负整数(正整数或零) \d+
正整数 [0-9]*[1-9][0-9]*
负整数 -[0-9]*[1-9][0-9]*
整数 -?\d+
小数 (-?\d+)(\.\d+)?
不包含abc的单词 \b((?!abc)\w)+\b

正则表达式 :是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串,简单说,就是我们写个模板,然后去匹配字符串。

下面我们来看看一些基本的正则表达式的语法:

\:将下个字符标记为一个特殊的字符、一个原义字符、一个向后引用或者一个八进制转义符例如“\n”就是匹配一个换行符。

^:匹配开始位置,^(a)这个就匹配开头必须为a。

$:匹配结束位置,$(a)这个就匹配结尾必须为a。

*:匹配前面的子表达式零次或者多次,如“xu*”这个表达式就能够匹配“x”和“xuu”。

+:匹配前面的子表达式一次或者多次,如“xu+”这个表达式就能够匹配“xuu”和“xu”,但不能够匹配“x”,这个就是和“*”的区别。

?:匹配前面的子表达式零次或者一次,如“xu?”这个表达式就能够匹配“jian(guo)?”就可以匹配“jian”和“jianguo”。

{n}:n是一个非负数,匹配n次,如“guo{2}”,可以匹配“guoo”,不能匹配“guo”。

{n,}:n是一个非负数,匹配至少n次。

{n, m}:m、n都是非负数,最少匹配n次,最多匹配m次。

(pattern):匹配pattern并获取匹配结果。

(?:pattern):匹配pattern但不获取匹配结果。

x|y:匹配x或y,如“(xu|jian)guo”匹配“xuguo”或者“jianguo”。

[xyz]:字符集合,匹配所包含的任意字符。如“[abc]”可以匹配“apple”中的“a”。

[^xyz]:匹配未被包含的字符。

[a-z]:字符范围,匹配指定范围内的任意字符。

[^a-z]:匹配指定不在范围内的任意字符。

\b:匹配一个单词的边界,如“guo\b”可以匹配“xujianguo”中的“guo”。

\B:匹配非单词边界,如“jian\B”可以匹配“xujianguo”中的“jian”。

\d:匹配一个数字字符,等价于“[0-9]”。

\D:匹配一个非数字字符。

\f:匹配一个换页符。

\n:匹配一个换行符。

\r:匹配一个回车符。

\s:匹配任何空白字符

其实还有很多语法我就不一一列举了,先说这么多先


一.NSString自带的正则查找,替换方法

正则查找方法 
– rangeOfString:options: 
– rangeOfString:options:range: 
– rangeOfString:options:range:locale:

正则替换方法 
– stringByReplacingOccurrencesOfString:withString:options:range:

options参数指定搜索选项,类型为 NSStringCompareOptions ,可通过位或操作指定为 NSCaseInsensitiveSearch ,  NSLiteralSearch ,  NSBackwardsSearch , NSAnchoredSearch >等选项的组合。 
若指定的选项为 NSRegularExpressionSearch ,则搜索字符串被认为是ICU兼容的正则表达式,如果指定了此选项,则与其可以同时存在的选项只有NSCaseInsensitiveSearch 和 NSAnchoredSearch

二.使用 RegexKitLite

RegexKitLite向标准NSString类增加了很多方法来使用正则表达式,RegexKitLite使用iOS系统自带的ICU( International Components for Unicode )正则引擎处理正则表达式,所以RegexKitLite使用的正则语法为ICU的语法,使用RegexKitLite需要导入libicucore.dylib库。

使用RegexKitLite的方法很简单,将RegexKitLite.h和RegexKitLite.m加入到工程,然后引入libicucore.dylib库即可。 
RegexKitLite.h   RegexKitLite.m

RegexKitLit NSString方法参考 
RegexKitLite NSString Additions Reference

RegexKitLite的使用说明见: 
Using RegexKitLite

ICU正则语法为: 
ICU Syntax 
ICU User Guide – Regular Expressions

三.使用 RegexKit.framework 框架

RegexKit Framework与RegexKitLite来自同一体系,但其更复杂和强大。RegexKit Framework不使用iOS系统的ICU正则库,而是自带 PCRE( Perl Compatible Regular Expressions )库, 所以其正则语法是PCRE的语法。

RegexKit Framework功能很强大,其向NSArray,NSData,NSDictionary,NSSet和NSString对象增加了正则表达式的支持。

TRegexKit.framework与 RegexKit Lite 的区别

RegexKit.framework RegexKit Lite
Regex Library PCRE ICU
Library Included Yes, built into framework object file. No, provided by  Mac OS X.
Library Linked As Statically linked into framework. Dynamically linked to/usr/lib/libicucore.dylib.
Compiled Size Approximately  371KB  per architecture. Very small, approximately  16KB—20KB   per architecture.
Style External, linked to framework. Compiled directly in to final executable.
Feature Set Large, with additions to many classes. Minimal,  NSString  only.

四.常用ICU正则匹配模式

常用的ICU正则匹配模式见: 
RegexKitLite Cookbook

Description Regex Examples
Integer [+\-]?[0-9]+ 123 -42 +23
Hex Number 0[xX][0-9a-fA-F]+ 0×0 0xdeadbeef0xF3
Floating Point [+\-]?(?:[0-9]*\.[0-9]+|[0-9]+\.) 123. .123 +.42
Floating Point with Exponent [+\-]?(?:[0-9]*\.[0-9]+|[0-9]+\.)(?:[eE][+\-]?[0-9]+)? 123. .123 10.0E131.23e-7
Comma Separated Number [0-9]{1,3}(?:,[0-9]{3})* 42 1,234 1,234,567
Comma Separated Number [0-9]{1,3}(?:,[0-9]{3})*(?:\.[0-9]+)? 42 1,2341,234,567.89

文本文件 Text Files

Description Regex
Empty Line (?m:^$)
Empty or Whitespace Only Line (?m-s:^\s*$)
Strip Leading Whitespace (?m-s:^\s*(.*?)$)
Strip Trailing Whitespace (?m-s:^(.*?)\s*$)
Strip Leading and Trailing Whitespace (?m-s:^\s*(.*?)\s*$)
Quoted String, Can Span Multiple Lines, May Contain \" "(?:[^"\\]*+|\\.)*"
Quoted String, Single Line Only, May Contain \" "(?:[^"\\\r\n]*+|\\[^\r\n])*"
HTML Comment (?s:<--.*?-->)
Perl / Shell Comment (?m-s:#.*$)
C, C++, or ObjC Comment (?m-s://.*$)
C, C++, or ObjC Comment and Leading Whitespace (?m-s:\s*//.*$)
C, C++, or ObjC Comment (?s:/\*.*?\*/)

网络与URL相关 Network and URL

Description Regex
HTTP \bhttps?://[a-zA-Z0-9\-.]+(?:(?:/[a-zA-Z0-9\-._?,'+\&%$=~*!():@\\]*)+)?
HTTP \b(https?)://([a-zA-Z0-9\-.]+)((?:/[a-zA-Z0-9\-._?,'+\&%$=~*!():@\\]*)+)?
HTTP \b(https?)://(?:(\S+?)(?::(\S+?))?@)?([a-zA-Z0-9\-.]+)(?::(\d+))?((?:/[a-zA-Z0-9\-._?,'+\&%$=~*!():@\\]*)+)?
E-Mail \b([a-zA-Z0-9%_.+\-]+)@([a-zA-Z0-9.\-]+?\.[a-zA-Z]{2,6})\b
Hostname \b(?:[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}?[a-zA-Z0-9]\.)+[a-zA-Z]{2,6}\b
IP \b(?:\d{1,3}\.){3}\d{1,3}\b
IP with Optional Netmask \b((?:\d{1,3}\.){3}\d{1,3})(?:/(\d{1,2}))?\b
IP or Hostname \b(?:(?:\d{1,3}\.){3}\d{1,3}|(?:[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}?[a-zA-Z0-9]\.)+[a-zA-Z]{2,6})\b

五.贪婪匹配与最小匹配

在正则表达式中单独使用*或+时,默认是匹配尽可能多的数据,即贪婪匹配。

*	Match zero or more times. Match as many times as possible.
+	Match one or more times. Match as many times as possible.

比如对 abcdefgabcdefg 使用abc(.*)g进行匹配,则捕获到到的数据为 defgabcdef。
若只想捕获到第一个g,即只想得到def,则需要使用最小匹配,在*或+后面加上?,即使用abc(.*?)g进行匹配。

*?	Match zero or more times. Match as few times as possible.
+?	Match one or more times. Match as few times as possible.

另外,在正则中用(…)包含内容是要捕获的数据,如果只要用(…)来引用group而不想捕获则可使用(?:…)。

(…)	Capturing parentheses. Range of input that matched the parenthesized subexpression is available after the match.

(?:…)	Non-capturing parentheses. Groups the included pattern, but does not provide capturing of matching text. Somewhat more efficient than capturing parentheses.

六.正则表达式书写格式

在书写正则表达式时,需要将\进行转义,即写成两个\\。 
例如 匹配IP地址的正则表达式为 \b(?:\d{1,3}\.){3}\d{1,3}\b,则在实际书写时则为


NSString *regex = @"\\b(?:\\d{1,3}\.){3}\\d{1,3}\\b";

参考: 
iOS 开发中使用正则表达式-暨 RegexKitLite 库的用法 
RegexKitLite Documentation 
[perl]理解贪婪匹配和最小匹配之间的区别 
NSString Class Reference 
ICU – International Components for Unicode

来源: http://blog.csdn.net/zeng11088/article/details/8766121


常用的第三方正则库:

http://regexkit.sourceforge.net/RegexKitLite/index.html


匹配中文字符的正则表达式: [\u4e00-\u9fa5] 
评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 
匹配双字节字符(包括汉字在内):[^\x00-\xff] 
评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) 
匹配空白行的正则表达式:\n\s*\r 
评注:可以用来删除空白行 
匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?|<.*? /> 
评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力 
匹配首尾空白字符的正则表达式:^\s*|\s*$ 
评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式 
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 
评注:表单验证时很实用 
匹配网址URL的正则表达式:[a-zA-z]+://[^\s]* 
评注:网上流传的版本功能很有限,上面这个基本可以满足需求 
匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 
评注:表单验证时很实用 
匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7} 
评注:匹配形式如 0511-4405222 或 021-87888822 
匹配腾讯QQ号:[1-9][0-9]{4,} 
评注:腾讯QQ号从10000开始 
匹配中国邮政编码:[1-9]\d{5}(?!\d) 
评注:中国邮政编码为6位数字 
匹配身份证:\d{15}|\d{18} 
评注:中国的身份证为15位或18位 
匹配ip地址:\d+\.\d+\.\d+\.\d+ 
评注:提取ip地址时有用 
匹配特定数字: 
^[1-9]\d*$ //匹配正整数 
^-[1-9]\d*$ //匹配负整数 
^-?[1-9]\d*$ //匹配整数 
^[1-9]\d*|0$ //匹配非负整数(正整数 + 0) 
^-[1-9]\d*|0$ //匹配非正整数(负整数 + 0) 
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ //匹配正浮点数 
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ //匹配负浮点数 
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ //匹配浮点数 
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ //匹配非负浮点数(正浮点数 + 0) 
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ //匹配非正浮点数(负浮点数 + 0) 
评注:处理大量数据时有用,具体应用时注意修正 
匹配特定字符串: 
^[A-Za-z]+$ //匹配由26个英文字母组成的字符串 
^[A-Z]+$ //匹配由26个英文字母的大写组成的字符串 
^[a-z]+$ //匹配由26个英文字母的小写组成的字符串 
^[A-Za-z0-9]+$ //匹配由数字和26个英文字母组成的字符串 
^\w+$ //匹配由数字、26个英文字母或者下划线组成的字符串


来源: http://www.cnblogs.com/xujh/archive/2008/08/21/1273525.html

      οnpaste="return   !/[^\w\u4e00-\u9fa5]/g.test(window.clipboardData.getData('Text'))"   
      οndragenter="return   false"/>

再粘贴一些别人写的。

1.只能输入数字和英文的:  
 
2.只能输入数字的:  
 
3.只能输入全角的:  
 
4.只能输入汉字的:  
 
5.邮件地址验证: 
var regu = "^(([0-9a-zA-Z]+)|([0-9a-zA-Z]+[_.0-9a-zA-Z-]*[0-9a-zA-Z]+))@([a-zA-Z0-9-]+[.])+([a-zA-Z]{2}|net|NET|com|COM|gov|GOV|mil|MIL|org|ORG|edu|EDU|int|INT)$" 
var re = new RegExp(regu); 
if (s.search(re) != -1) { 
return true; 
} else { 
window.alert ("请输入有效合法的E-mail地址 !") 
return false; 

6.身份证: 
"^\\d{17}(\\d|x)$" 
7.17种正则表达式 
"^\\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.取消按钮按下时的虚线框  
在input里添加属性值  hideFocus 或者 HideFocus=true  
   
2.只读文本框内容  
  在input里添加属性值  readonly  
   
3.防止退后清空的TEXT文档(可把style内容做做为类引用)  
  
   
4.ENTER键可以让光标移到下一个输入框  
  
   
5.只能为中文(有闪动)  
  
   
6.只能为数字(有闪动)  
  
   
7.只能为数字(无闪动)  
  
   
8.只能输入英文和数字(有闪动)  
  
   
9.屏蔽输入法  
  
   
10. 只能输入 数字,小数点,减号(-) 字符(无闪动)  
57)) event.returnValue=false">  
   
11. 只能输入两位小数,三位小数(有闪动)  
 


javascript正则表达式使用详解

简介

简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具。其作用如下: 
测试字符串的某个模式。例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式。这称为数据有效性验证。 
替换文本。可以在文档中使用一个正则表达式来标识特定文字,然后可以全部将其删除,或者替换为别的文字。 
根据模式匹配从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特定文字。

基本语法

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

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

“+”元字符规定其前导字符必须在目标对象中连续出现一次或多次。

“*”元字符规定其前导字符必须在目标对象中出现零次或连续多次。

“?”元字符规定其前导对象必须在目标对象中连续出现零次或一次。

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

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

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

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

有时候不知道要匹配多少字符。为了能适应这种不确定性,正则表达式支持限定符的概念。这些限定符可以指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。

{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?'。请注意在逗号和两个数之间不能有空格。

除了元字符之外,用户还可以精确指定模式在匹配对象中出现的频率。例如,/jim {2,6}/ 上述正则表达式规定字符m可以在匹配对象中连续出现2-6次,因此,上述正则表达式可以同jimmy或jimmmmmy等字符串相匹配。 
在对如何使用正则表达式有了初步了解之后,我们来看一下其它几个重要的元字符的使用方式。

代码
  1. \s:用于匹配单个空格符,包括tab键和换行符;    
  2. \S:用于匹配除单个空格符之外的所有字符;    
  3. \d:用于匹配从 0 到 9 的数字;    
  4. \w:用于匹配字母,数字或下划线字符;    
  5. \W:用于匹配所有与\w不匹配的字符;    
  6. . :用于匹配除换行符之外的所有字符。    
(说明:我们可以把\s和\S以及\w和\W看作互为逆运算) 
下面,我们就通过实例看一下如何在正则表达式中使用上述元字符。 
/\s+/ 上述正则表达式可以用于匹配目标对象中的一个或多个空格字符。 
/\d000/ 如果我们手中有一份复杂的财务报表,那么我们可以通过上述正则表达式轻而易举的查找到所有总额达千元的款项。 
除了我们以上所介绍的元字符之外,正则表达式中还具有另外一种较为独特的专用字符,即定位符。定位符用于规定匹配模式在目标对象中的出现位置。 较为常用的定位符包括: “^”, “$”, “\b” 以及 “\B”。
代码
  1. “^”定位符规定匹配模式必须出现在目标字符串的开头   
  2. “$”定位符规定匹配模式必须出现在目标对象的结尾   
  3. “\b”定位符规定匹配模式必须出现在目标字符串的开头或结尾的两个边界之一   
  4. “\B”定位符则规定匹配对象必须位于目标字符串的开头和结尾两个边界之内,   
  5.       即匹配对象既不能作为目标字符串的开头,也不能作为目标字符串的结尾。   
同样,我们也可以把“^”和“$”以及“\b”和“\B”看作是互为逆运算的两组定位符。举例来说: /^hell/ 因为上述正则表达式中包含“^”定位符,所以可以与目标对象中以 “hell”, “hello”或“hellhound”开头的字符串相匹配。 /ar$/ 因为上述正则表达式中包含“$”定位符,所以可以与目标对象中以 “car”, “bar”或 “ar” 结尾的字符串相匹配。 /\bbom/ 因为上述正则表达式模式以“\b”定位符开头,所以可以与目标对象中以 “bomb”, 或 “bom”开头的字符串相匹配。/man\b/ 因为上述正则表达式模式以“\b”定位符结尾,所以可以与目标对象中以 “human”, “woman”或 “man”结尾的字符串相匹配。 
为了能够方便用户更加灵活的设定匹配模式,正则表达式允许使用者在匹配模式中指定某一个范围而不局限于具体的字符。例如:
代码
  1. /[A-Z]/ 上述正则表达式将会与从A到Z范围内任何一个大写字母相匹配。   
  2. /[a-z]/ 上述正则表达式将会与从a到z范围内任何一个小写字母相匹配。    
  3. /[ 0 - 9 ]/  上述正则表达式将会与从 0 到 9 范围内任何一个数字相匹配。    
  4. /([a-z][A-Z][ 0 - 9 ])+/ 上述正则表达式将会与任何由字母和数字组成的字符串,如 “aB0” 等相匹配。   
这里需要提醒用户注意的一点就是可以在正则表达式中使用 “()” 把字符串组合在一起。“()”符号包含的内容必须同时出现在目标对象中。因此,上述正则表达式将无法与诸如 “abc”等的字符串匹配,因为“abc”中的最后一个字符为字母而非数字。 
如果我们希望在正则表达式中实现类似编程逻辑中的“或”运算,在多个不同的模式中任选一个进行匹配的话,可以使用管道符 “|”。例如:/to|too|2/ 上述正则表达式将会与目标对象中的 “to”, “too”, 或 “2” 相匹配。 
正则表达式中还有一个较为常用的运算符,即否定符 “[^]”。与我们前文所介绍的定位符 “^” 不同,否定符 “[^]”规定目标对象中不能存在模式中所规定的字符串。例如:/[^A-C]/ 上述字符串将会与目标对象中除A,B,和C之外的任何字符相匹配。一般 来说,当“^”出现在 “[]”内时就被视做否定运算符;而当“^”位于“[]”之外,或没有“[]”时,则应当被视做定位符。 
最后,当用户需要在正则表达式的模式中加入元字符,并查找其匹配对象时,可以使用转义符“\”。例如:/Th\*/ 上述正则表达式将会与目标对象中的“Th*”而非“The”等相匹配。 
在构造正则表达式之后,就可以象数学表达式一样来求值,也就是说,可以从左至右并按照一个优先级顺序来求值。优先级如下:
代码
  1. 1 .\ 转义符   
  2. 2 .(), (?:), (?=), [] 圆括号和方括号   
  3. 3 .*, +, ?, {n}, {n,}, {n,m} 限定符   
  4. 4 .^, $, \anymetacharacter 位置和顺序   
  5. 5 .|“或”操作   

使用实例 
在JavaScript 1.2中带有一个功能强大的RegExp()对象,可以用来进行正则表达式的匹配操作。其中的test()方法可以检验目标对象中是否包含匹配模式,并相应的返回true或false。 
我们可以使用JavaScript编写以下脚本,验证用户输入的邮件地址的有效性。

代码
  1. < html >     
  2. < head >     
  3.   < script   language = "Javascript1.2" >     
  4.  

你可能感兴趣的:(正则表达式学习)