常用正則表達式

組成

普通字符

普通字符包括沒有顯式指定為元字符的所有可打印和不可打印字符玉转。這包括所有大寫和小寫字母、所有數(shù)字勾怒、所有標(biāo)點符號和一些其他符號郊艘。

直接量字符

非打印字符是正則表達式的組成部分。下表列出了表示非打印字符的轉(zhuǎn)義序列:

'\f'   # 匹配一個換頁符出嘹。等價于 \x0c 和 \cL席楚。
'\n'   # 匹配一個換行符。等價于 \x0a 和 \cJ税稼。
'\r'   # 匹配一個回車符烦秩。等價于 \x0d 和 \cM。
'\t'   # 匹配一個制表符郎仆。等價于 \x09 和 \cI只祠。
'\v'   # 匹配一個垂直制表符。等價于 \x0b 和 \cK扰肌。
'\s'   # 匹配任何空白字符抛寝,包括空格、制表符曙旭、換頁符等等盗舰。等價于 [ \f\n\r\t\v]。
'\S'   # 匹配任何非空白字符桂躏。等價于 [^ \f\n\r\t\v]钻趋。
'\XXX' # 由十進制數(shù) XXX 指定的ASCII碼字符
'\Xnn' # 由十六進制數(shù) nn 指定的ASCII碼字符
'\cX'  # 匹配由x指明的控制字符。*例如沼头, \cM 匹配一個 Control-M 或回車符爷绘。x 的值必須為 A-Z 或 a-z 之一。否則进倍,將 c 視為一個原義的 'c' 字符土至。*
'\c'
\cX  # ^X
\cM  # Control-M 或回車符
\cI  # \t
\cJ  # \n

特殊字符

所謂特殊字符,就是一些有特殊含義的字符猾昆,如上面說的'.txt'中的''陶因,簡單的說就是表示任何字符串的意思。如果要查找文件名中有''的文件垂蜗,則需要對''進行轉(zhuǎn)義楷扬,即在其前加一個''。許多元字符要求在試圖匹配它們時特別對待贴见。若要匹配這些特殊字符烘苹,必須首先使字符"轉(zhuǎn)義",即片部,將反斜杠''放在它們前面镣衡。下表列出了正則表達式中的特殊字符:

'$'     # 匹配輸入字符串的結(jié)尾位置。如果設(shè)置了 RegExp 對象的 Multiline 屬性档悠,則 $ 也匹配 '\n' 或 '\r'廊鸥。要匹配 $ 字符本身,請使用 \$辖所。
'(' ')' # 標(biāo)記一個子表達式的開始和結(jié)束位置惰说。子表達式可以獲取供以后使用。要匹配這些字符缘回,請使用 \( 和 \)吆视。
'*'     # 匹配前面的子表達式零次或多次。要匹配 * 字符切诀,請使用 \*揩环。
'+'     # 匹配前面的子表達式一次或多次。要匹配 + 字符幅虑,請使用 \+丰滑。
'.'     # 匹配除換行符 \n 之外的任何單字符。要匹配 . 倒庵,請使用 \. 褒墨。
'['     # 標(biāo)記一個中括號表達式的開始。要匹配 [擎宝,請使用 \[郁妈。
'?'     # 匹配前面的子表達式零次或一次,或指明一個非貪婪限定符绍申。要匹配 ? 字符噩咪,請使用 \?顾彰。
'\'     # 將下一個字符標(biāo)記為或特殊字符、或原義字符胃碾、或向后引用涨享、或八進制轉(zhuǎn)義符。例如仆百, 'n' 匹配字符 'n'厕隧。'\n' 匹配換行符。序列 '\\' 匹配 "\"俄周,而 '\(' 則匹配 "("吁讨。
'^'     # 匹配輸入字符串的開始位置,除非在方括號表達式中使用峦朗,此時它表示不接受該字符集合建丧。要匹配 ^ 字符本身,請使用 \^波势。
'{'     # 標(biāo)記限定符表達式的開始茶鹃。要匹配 {,請使用 \{艰亮。
'|'     # 指明兩項之間的一個選擇闭翩。要匹配 |,請使用 \|迄埃。

限定符

限定符用來指定正則表達式的一個給定組件必須要出現(xiàn)多少次才能滿足匹配疗韵。有'*'或'+'或'?'或'{n}'或'{n,}'或'{n,m}'共6種。

'*'     # 匹配前面的子表達式零次或多次侄非。例如蕉汪,zo* 能匹配 "z" 以及 "zoo"。* 等價于{0,}逞怨。
'+'     # 匹配前面的子表達式一次或多次者疤。例如,'zo+' 能匹配 "zo" 以及 "zoo"叠赦,但不能匹配 "z"驹马。+ 等價于 {1,}。
'?'     # 匹配前面的子表達式零次或一次除秀。例如糯累,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等價于 {0,1}册踩。
'{n}'   # n 是一個非負整數(shù)泳姐。匹配確定的 n 次。例如暂吉,'o{2}' 不能匹配 "Bob" 中的 'o'胖秒,但是能匹配 "food" 中的兩個 o缎患。
'{n,}'  # n 是一個非負整數(shù)。至少匹配n 次阎肝。例如较锡,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o盗痒。'o{1,}' 等價于 'o+'。'o{0,}' 則等價于 'o*'低散。
'{n,m}' # m 和 n 均為非負整數(shù)俯邓,其中n <= m。最少匹配 n 次且最多匹配 m 次熔号。例如稽鞭,"o{1,3}" 將匹配 "fooooood" 中的前三個 o。'o{0,1}' 等價于 'o?'引镊。請注意在逗號和兩個數(shù)之間不能有空格朦蕴。

定位符

定位符使您能夠?qū)⒄齽t表達式固定到行首或行尾。它們還使您能夠創(chuàng)建這樣的正則表達式弟头,這些正則表達式出現(xiàn)在一個單詞內(nèi)吩抓、在一個單詞的開頭或者一個單詞的結(jié)尾。
定位符用來描述字符串或單詞的邊界赴恨,^和$分別指字符串的開始與結(jié)束疹娶,\b描述單詞的前或后邊界,\B表示非單詞邊界伦连。

'^'  # 匹配輸入字符串開始的位置雨饺。如果設(shè)置了 RegExp 對象的 Multiline 屬性,^ 還會與 \n 或 \r 之后的位置匹配惑淳。
'$'  # 匹配輸入字符串結(jié)尾的位置额港。如果設(shè)置了 RegExp 對象的 Multiline 屬性,$ 還會與 \n 或 \r 之前的位置匹配歧焦。
'\b' # 匹配一個字邊界移斩,即字與空格間的位置。
'\B' # 非字邊界匹配绢馍。

字符類

將單獨的直接符放進中括號內(nèi)就可以組合成字符類.一個字符類和它所包含的任何一個字符都匹配,所以正則表達式 / [abc] / 和字母 "a" , "b" , "c" 中的任何一個都匹配.另外還可以定義否定字符類,這些類匹配的是除那些包含在中括號之內(nèi)的字符外的所有字符.定義否定字符尖時,要將一個 ^ 符號作為從左中括號算起的第一個字符.正則表達式的集合是 / [a-zA-z0-9] / .
由于某些字符類非常常用,所以JavaScript的正則表達式語法包含一些特殊字符和轉(zhuǎn)義序列來表示這些常用的類.例如, \s 匹配的是空格符,制表符和其它空白符, \s匹配的則是空白符之外的任何字符.

正則表灰式的字符類

字符匹配

[...] 位于括號之內(nèi)的任意字符
[^...] 不在括號之中的任意字符
. 除了換行符之外的任意字符,等價于[^\n]
\w 任何單字字符, 等價于[a-zA-Z0-9]
\W 任何非單字字符,等價于[^a-zA-Z0-9]
\s 任何空白符,等價于[\ t \ n \ r \ f \ v]
\S 任何非空白符,等價于[^\ t \ n \ r \ f \ v]
\d 任何數(shù)字,等價于[0-9]
\D 除了數(shù)字之外的任何字符,等價于[^0-9]
[\b] 一個退格直接量(特例)

復(fù)制

用以上的正則表式的語法,可以把兩位數(shù)描述成 / \ d \ d /,把四位數(shù)描述成 / \d \ d \ d \ d /.但我們還沒有一種方法可以用來描述具有任意多數(shù)位的數(shù)字或者是一個
字符串.這個串由三個字符以及跟隨在字母之后的一位數(shù)字構(gòu)成.這些復(fù)雜的模式使用的正則表達式語法指定了該表達式中每個元素要重復(fù)出現(xiàn)的次數(shù).
指定復(fù)制的字符總是出現(xiàn)在它們所作用的模式后面.由于某種復(fù)制類型相當(dāng)常用.所以有一些特殊的字符專門用于表示它們.例如: +號匹配的就是復(fù)制前一模式一次或多次的模式.下面的表列出了復(fù)制語法.先看一個例子:

/\d{2, 4}/ //匹配2到4間的數(shù)字.
/\w{3} \d?/ //匹配三個單字字符和一個任意的數(shù)字.
/\s+java\s+/ //匹配字符串"java" ,并且該串前后可以有一個或多個空格.
/[^"] * / //匹配零個或多個非引號字符.

正則表達式的復(fù)制字符的含義

{n, m} 匹配前一項至少n次,但是不能超過m次
{n, } 匹配前一項n次,或者多次
{n} 匹配前一項恰好n次
? 匹配前一項0次或1次,也就是說前一項是可選的. 等價于 {0, 1}
+ 匹配前一項1次或多次,等價于{1,}
* 匹配前一項0次或多次.等價于{0,}

選擇,分組和引用

正則表達式的語法還包括指定選擇項,對子表達式分組和引用前一子表達式的特殊字符.字符| 用于分隔供選擇的字符.例如: /ab|cd|ef/ 匹配的是字符串 "ab",或者是字符串 "cd",又或者 "ef". /\d{3}|[a-z]{4}/ 匹配的是要么是一個三位數(shù),要么是四個小寫字母.在正則表達式中括號具有幾種作用.它的主要作用是把單獨的項目分組成子表達式,以便可以像處理一個獨立的單元那種用 *叹哭、+或? 來處理那些項目.例如: /java(script) ?/ 匹配的是字符串 "java",其后既可以有 "script",也可以沒有. /(ab|cd) + |ef) / 匹配的既可以是字符串 "ef",也可以是字符串"ab" 或者 "cd" 的一次或多次重復(fù).
在正則表達式中,括號的第二個用途是在完整的模式中定義子模式。當(dāng)一個正則表達式成功地和目標(biāo)字符串相匹配時,可以從目標(biāo)串中抽出和括號中的子模式相匹配的部分.例如,假定我們正在檢索的模式是一個或多個字母后面跟隨一位或多位數(shù)字,那么我們可以使用模式 / [a-z] + \ d+/.但是由于假定我們真正關(guān)心的是每個匹配尾部的數(shù)字,那么如果我們將模式的數(shù)字部分放在括號中 (/ [a-z] + (\d+)/) ,我們就可以從所檢索到的任何匹配中抽取數(shù)字了,之后我們會對此進行解析的.
代括號的子表達式的另一個用途是,允許我們在同一正則表達式的后面引用前面的子表達式.這是通過在字符串 \ 后加一位或多位數(shù)字來實現(xiàn)的.數(shù)字指的是代括號的子表達式在正則表達式中的位置.例如: \1 引用的是第一個代括號的子表達式. \3 引用的是第三個代括號的子表達式.注意,由于子表達式可以嵌套在其它子表達式中,所以它的位置是被計數(shù)的左括號的位置.
例如:在下面的正則表達式被指定為 \2:

/([Jj]ava([Ss]cript)) \sis \s (fun\w*) /
對正則表達式中前一子表達式的引用所指定的并不是那個子表達式的模式,而是與那個模式相匹配的文本.這樣,引用就不只是幫助你輸入正則表達式的重復(fù)部分的快捷方式了,它還實施了一條規(guī)約,那就是一個字符串各個分離的部分包含的是完全相同的字符.例如:下面的正則表達式匹配的就是位于單引號或雙引號之內(nèi)的所有字符.但是,它要求開始和結(jié)束的引號匹配(例如兩個都是雙引號或者都是單引號):
/[' "] [^=XXFN}[' "]/
如果要求開始和結(jié)束的引號匹配,我們可以使用如下的引用:
/( [' "] ) {FNXX=] \1/
\1匹配的是第一個代括號的子表達式所匹配的模式.在這個例子中,它實施了一種規(guī)約,那就是開始的引號必須和結(jié)束的引號相匹配.注意,如果反斜杠后跟隨的數(shù)字比代括號的子表達式數(shù)多,那么它就會被解析為一個十進制的轉(zhuǎn)義序列,而不是一個引用.你可以堅持使用完整的三個字符來表示轉(zhuǎn)義序列,這們就可以避免混淆了.例如,使用 \044,而不是\44.下面是正則表達式的選擇痕貌、分組和引用字符:

字符含義

| 選擇.匹配的要么是該符號左邊的子表達式,要么它右邊的子表達式
(...) 分組.將幾個項目分為一個單元.這個單元可由 *风罩、+、舵稠?和|等符號使用,而且還可以記住和這個組匹配的字符以供此后引用使用
\n 和第n個分組所匹配的字符相匹配.分組是括號中的子表達式(可能是嵌套的).分組號是從左到右計數(shù)的左括號數(shù)

指定匹配的位置

我們已經(jīng)看到了,一個正則表達式中的許多元素才能夠匹配字符串的一個字符.例如: \s 匹配的只是一個空白符.還有一些正則表達式的元素匹配的是字符之間寬度為0的空間,而不是實際的字符例如: \b 匹配的是一個詞語的邊界,也就是處于一個/w字字符和一個\w非字字符之間的邊界.像\b 這樣的字符并不指定任何一個匹配了的字符串中的字符,它們指定的是匹配所發(fā)生的合法位置.有時我們稱這些元素為正則表達式的錨.因為它們將模式定位在檢索字符串中的一個特定位置.最常用的錨元素是 ^, 它使模式依賴于字符串的開頭,而錨元素$則使模式定位在字符串的末尾.
例如:要匹配詞 "javascript" ,我們可以使用正則表達式 /^ javascript $/. 如果我們想檢索 "java" 這個詞自身 (不像在 "javascript" 中那樣作為前綴),那么我們可以使用模式 /\s java \s /, 它要求在詞語java之前和之后都有空格.但是這樣作有兩個問題.第一: 如果 "java" 出現(xiàn)在一個字符的開頭或者是結(jié)尾.該模式就不會與之匹配,除非在開頭和結(jié)尾處有一個空格. 第二: 當(dāng)這個模式找到一個與之匹配的字符時,它返回的匹配的字符串前端和后端都有空格,這并不是我們想要的.因此,我們使用詞語的邊界 \b 來代替真正的空格符 \s 進行匹配. 結(jié)果表達式是 /\b java \b/.
下面是正則表達式的錨字符:

字符含義

^ 匹配的是字符的開頭,在多行檢索中,匹配的是一行的開頭
$ 匹配的是字符的結(jié)尾,在多行檢索中,匹配的是一行的結(jié)尾
\b 匹配的是一個詞語的邊界.簡而言之就是位于字符\w 和 \w之間的位置(注意:[\b]匹配的是退格符)
\B 匹配的是非詞語的邊界的字符

屬性

有關(guān)正則表達式的語法還有最后一個元素,那就是正則表達式的屬性,它說明的是高級模式匹配的規(guī)則.和其它正則表達式語法不同,屬性是在 / 符號之外說明的.即它們不出現(xiàn)在兩個斜杠之間,而是位于第二個斜杠之后.javascript 1.2支持兩個屬性.屬性 i 說明模式匹配應(yīng)該是大小寫不敏感的.屬性 g 說明模式匹配應(yīng)該是全局的.也就是說,應(yīng)該找出被檢索的字符串中所有的匹配.這兩種屬性聯(lián)合起來就可以執(zhí)行一個全局的,大小寫不敏感的匹配.

例如: 要執(zhí)行一個大小不敏感的檢索以找到詞語 "java" (或者是 "java" 超升、"JAVA"等) 的第一個具體值,我們可以使用大小不敏感的正則表達式 /\b java\b/i .如果要在一個字符串中找到 "java" 所有的具體值,我們還可以添加屬性 g, 即 /\b java \b/gi .

以下是正則表達式的屬性:

字符含義

i 執(zhí)行大小寫不敏感的匹配

g 執(zhí)行一個全局的匹配,簡而言之,就是找到所有的匹配,而不是在找到第一個之后就停止了
除屬性 g 和 i 之外,正則表達式就沒有其它像屬性一樣的特性了.如果將構(gòu)造函數(shù) RegExp 的靜態(tài)屬性 multiline 設(shè)置為 tr ,那么模式匹配將以多行的模式進行.在這種模式下,錨字符 ^ 和 $ 匹配的不只是檢索字符串的開頭和結(jié)尾,還匹配檢索字符串內(nèi)部的一行的開頭和結(jié)尾.

例如: 模式 /Java$/ 匹配的是 "Java",但是并不匹配"Java\nis fun" .如果我們設(shè)置了 multiline 屬性,那么后者也將被匹配:
RegExp.multiline = tr;
正則表達式(regular expression)對象包含一個正則表達式模式(pattern)入宦。它具有用正則表達式模式去匹配或代替一個串(string)中特定字符(或字符集合)的屬性(properties)和方法(methods)。要為一個單獨的正則表達式添加屬性,可以使用正則表達式構(gòu)造函數(shù)(constr tor function)室琢,無論何時被調(diào)用的預(yù)設(shè)置的正則表達式擁有靜態(tài)的屬性(the predefined RegExp object has static properties that are set whenever any regular expression is used, 我不知道我翻得對不對乾闰,將原文列出,請自行翻譯)盈滴。

創(chuàng)建:

一個文本格式或正則表達式構(gòu)造函數(shù)

文本格式: /pattern/flags
正則表達式構(gòu)造函數(shù): new RegExp("pattern"[,"flags"]);

參數(shù)說明:

pattern -- 一個正則表達式文本
flags -- 如果存在涯肩,將是以下值:
g: 全局匹配
i: 忽略大小寫
gi: 以上組合
[注意] 文本格式的參數(shù)不用引號,而在用構(gòu)造函數(shù)時的參數(shù)需要引號巢钓。如:/ab+c/i new RegExp("ab+c","i")是實現(xiàn)一樣的功能病苗。在構(gòu)造函數(shù)中,一些特殊字符需要進行轉(zhuǎn)意(在特殊字符前加"\")症汹。如:re = new RegExp("[url=file://\\w]\\w[/url]+")
正則表達式中的特殊字符
字符含意
\ 做為轉(zhuǎn)意硫朦,即通常在"\"后面的字符不按原來意義解釋,如/b/匹配字符"b"背镇,當(dāng)b前面加了反斜桿后/\b/咬展,轉(zhuǎn)意為匹配一個單詞的邊界。
-或-
對正則表達式功能字符的還原瞒斩,如"*"匹配它前面元字符0次或多次破婆,/a*/將匹配a,aa,aaa,加了"\"后胸囱,/a\*/將只匹配"a*"荠割。
^ 匹配一個輸入或一行的開頭,/^a/匹配"an A"旺矾,而不匹配"An a"
$ 匹配一個輸入或一行的結(jié)尾蔑鹦,/a$/匹配"An a",而不匹配"an A"
* 匹配前面元字符0次或多次箕宙,/ba*/將匹配b,ba,baa,baaa
+ 匹配前面元字符1次或多次嚎朽,/ba*/將匹配ba,baa,baaa
? 匹配前面元字符0次或1次,/ba*/將匹配b,ba
(x) 匹配x保存x在名為$1...$9的變量中
x|y 匹配x或y
{n} 精確匹配n次
{n,} 匹配n次以上
{n,m} 匹配n-m次
[xyz] 字符集(character set)柬帕,匹配這個集合中的任一一個字符(或元字符)
[^xyz] 不匹配這個集合中的任何一個字符
[\b] 匹配一個退格符
\b 匹配一個單詞的邊界
\B 匹配一個單詞的非邊界
\cX 這兒哟忍,X是一個控制符,/\cM/匹配Ctrl-M
\d 匹配一個字數(shù)字符陷寝,/\d/ = /[0-9]/
\D 匹配一個非字數(shù)字符锅很,/\D/ = /[^0-9]/
\n 匹配一個換行符
\r 匹配一個回車符
\s 匹配一個空白字符,包括\n,\r,\f,\t,\v等
\S 匹配一個非空白字符凤跑,等于/[^\n\f\r\t\v]/
\t 匹配一個制表符
\v 匹配一個重直制表符
\w 匹配一個可以組成單詞的字符(alphanumeric爆安,這是我的意譯,含數(shù)字)仔引,包括下劃線扔仓,如[\w]匹配"$5.98"中的5褐奥,等于[a-zA-Z0-9]
\W 匹配一個不可以組成單詞的字符,如[\W]匹配"$5.98"中的$翘簇,等于[^a-zA-Z0-9]撬码。

正則表達式對象的屬性及方法

預(yù)定義的正則表達式擁有有以下靜態(tài)屬性:input, multiline, lastMatch, lastParen, leftContext, rightContext和$1到$9。其中input和multiline可以預(yù)設(shè)置版保。其他屬性的值在執(zhí)行過exec或test方法后被根據(jù)不同條件賦以不同的值呜笑。許多屬性同時擁有長和短(perl風(fēng)格)的兩個名字,并且彻犁,這兩個名字指向同一個值即寒。(JavaScript模擬perl的正則表達式)

正則表達式對象的屬性屬性含義

$1...$9 如果它(們)存在哆料,是匹配到的子串
$_ 參見input
$* 參見multiline
$& 參見lastMatch
$+ 參見lastParen
$` 參見leftContext
$’  參見rightContext
constr tor創(chuàng)建一個對象的一個特殊的函數(shù)原型
global是否在整個串中匹配(bool型)
ignoreCase匹配時是否忽略大小寫(bool型)
input被匹配的串
lastIndex最后一次匹配的索引
lastParen最后一個括號括起來的子串
leftContext最近一次匹配以左的子串
multiline是否進行多行匹配(bool型)
prototype允許附加屬性給對象
rightContext最近一次匹配以右的子串
source正則表達式模式
lastIndex最后一次匹配的索引

正則表達式對象的方法

方法含義

compile正則表達式比較
exec執(zhí)行查找
test進行匹配
toSource返回特定對象的定義(literal representing)瑞眼,其值可用來創(chuàng)建一個新的對象恋捆。重載Object.toSource方法得到的溉瓶。
toString返回特定對象的串急鳄。重載Object.toString方法得到的。
valOf返回特定對象的原始值堰酿。重載Object.valOf方法得到

常用匹配

"^-[0-9]*[1-9][0-9]*$"                              //負整數(shù)  
"^-?\\d+$"                                          //整數(shù)  
"^\\d+([url=file://\\.\\d+)?$]\\.\\d+)?$[/url]"     //非負浮點數(shù)(正浮點數(shù) + 0)  
"^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$" //正浮點數(shù)  
"^((-\\d+([url=file://\\.\\d+)?)|(0+(\\.0+)?))$]\\.\\d+)?)|(0+(\\.0+)?))$[/url]" //非正浮點數(shù)(負浮點數(shù) + 0)  
"^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$" //負浮點數(shù)  
"^(-?\\d+)([url=file://\\.\\d+)?$]\\.\\d+)?$[/url]"  //浮點數(shù)  
"^[A-Za-z]+$"                                        //由26個英文字母組成的字符串  
"^[A-Z]+$"                                           //由26個英文字母的大寫組成的字符串  
"^[a-z]+$"                                           //由26個英文字母的小寫組成的字符串  
"^[A-Za-z0-9]+$"                                     //由數(shù)字和26個英文字母組成的字符串  
"^\\w+$"                                             //由數(shù)字疾宏、26個英文字母或者下劃線組成的字符串  
"^[\\w-]+([url=file://\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$]\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$[/url]" //email地址  
"^[a-zA-z]+://([url=file://\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$]\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$[/url]" //url

應(yīng)用實例

// 用戶名:
"/^[a-zA-Z]{1}([a-zA-Z0-9]|[_]){4,19}$/"
// 無符號字符串:
"/^[^\s]{1}[^-_\~!@#\$%\^&\*\.\(\)\[\]\{\}<>\?\\\/\'\"]*$/"
// Email:
"/^\w+([-+.]\w+)*@\w+([-.]\\w+)*\.\w+([-.]\w+)*$/"
// 電話號碼:
"/^((\(\d{3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}$/"
// 手機號碼:
"/^((\(\d{3}\))|(\d{3}\-))?13\d{9}$/"
// URL:
"/^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/"
// 身份證:
"/^\d{15}(\d{2}[A-Za-z0-9])?$/"
// 貨幣:
"/^\d+(\.\d+)?$/"
// 貨幣:
"/^\-\d+(\.\d+)*?$/"
// 數(shù)字:
"/^\d+$/"
// 郵政編碼:
"/^[1-9]\d{5}$/"
// QQ:
"/^[1-9]\d{4,8}$/"
// 整數(shù):
"/^[-\+]?\d+$/"
// 實數(shù):
"/^[-\+]?\d+(\.\d+)?$/"
// 英文:
"/^[A-Za-z]+$/"
// 中文
"/^[\Α-\¥]+$/"
// 密碼(必須含有大寫字母、小寫字母触创、標(biāo)點坎藐、數(shù)字中的至少兩種。呵呵哼绑,這個比較變態(tài)吧~)
"/^(([A-Z]*|[a-z]*|\d*|[-_\~!@#\$%\^&\*\.\(\)\[\]\{\}<>\?\\\/\'\"]*)|.{0,5})$|\s/"

利用正則表達式限制網(wǎng)頁表單里的文本框輸入內(nèi)容:

<!-- 用正則表達式限制只能輸入數(shù)字和英文 -->
<input onkeyup="value=value.replace(/[/W]/g,'')" 
onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^/d]/g,''))"id="text1" name="text1"> )"
<!-- 用正則表達式限制只能輸入數(shù)字 -->
<input onkeyup="value=value.replace(/[^/d]/g,'') " 
onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^/d]/g,''))"id="text2" name="text2"> 
<!-- 用正則表達式限制只能輸入全角字符 -->
<input onkeyup="value=value.replace(/[^/uFF00-/uFFFF]/g,'')" 
onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^/uFF00-/uFFFF]/g,''))" 
id="text3" name="text3"> 
<!-- 用正則表達式限制只能輸入中文 -->
<input onkeyup="value=value.replace(/[^/u4E00-/u9FA5]/g,'')" 
onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^/u4E00-/u9FA5]/g,''))" 
id="text4" name="text4">

JavaScript中的正則表達式解析

<script lang ge="java script">
//去左空格;
function ltrim(s){
     return s.replace( /^\\s*/, "");
}
//去右空格;
function rtrim(s){
     return s.replace( /\\s*$/, "");
}
//去左右空格;
function trim(s){
     return rtrim(ltrim(s));
}
//是否為空值;
function IsEmpty(_str){
     var tmp_str = trim(_str);
     return tmp_str.length == 0;
}
//是否有效的Email;
function IsMail(_str){
     var tmp_str = trim(_str);
     var pattern = /^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*$/;
     return pattern.test(tmp_str);
}
HTML代碼的屏蔽
function mask_HTMLCode(strInput) {
   var myReg = /<(\w+)>/;
   return strInput.replace(myReg, "<$1>");
}
/*驗證是否是中文*/
       function IsChinese(str)
        {
          var pattern=/^[\?-\龥]+$/;
          if(!pattern.test(str))
           {return false;}
             return tr;
           }
//是否有效的數(shù)字;
function IsNumber(_str){
     var tmp_str = trim(_str);
     var pattern = /^[0-9]/;
     return pattern.test(tmp_str);
}
//是否有效的顏色值;
function IsColor(color){
     var temp=color;
     if (temp=="") return tr;
     if (temp.length!=7) return false;
     return (temp.search(/\\#[a-fA-F0-9]{6}/) != -1);
}
//是否有效的鏈接;
function IsURL(url){
     var sTemp;
     var b=tr;
     sTemp=url.s string(0,7);
     sTemp=sTemp.toUpperCase();
     if ((sTemp!="http://") target="_blank"   ... #124;|(url.length<10)){
         b=false;
     }
     return b;
}
//是否有效的手機號碼;
function IsMobile(_str){
     var tmp_str = trim(_str);
     var pattern = /13\\d{9}/;
     return pattern.test(tmp_str);
}
</script>

正則表達式是一個描述字符模式的對象岩馍。
JavaScript的RegExp對象和String對象定義了使用正則表達式來執(zhí)行強大的模式匹配和文本檢索與替換函數(shù)的方法.
在JavaScript中,正則表達式是由一個RegExp對象表示的.當(dāng)然,可以使用一個RegExp()構(gòu)造函數(shù)來創(chuàng)建RegExp對象,也可以用JavaScript 1.2中的新添加的一個特殊語法來創(chuàng)建RegExp對象.就像字符串直接量被定義為包含在引號內(nèi)的字符一樣,正則表達式直接量也被定義為包含在一對斜杠(/)之間的字符.所以,JavaScript可能會包含如下的代碼:
var pattern = /s$/;
這行代碼創(chuàng)建一個新的RegExp對象,并將它賦給變量parttern.這個特殊的RegExp對象和所有以字母"s"結(jié)尾的字符串都匹配.用RegExp()也可以定義一個等價的正則表達式,代碼如下:
var pattern = new RegExp("s$");
無論是用正則表達式直接量還是用構(gòu)造函數(shù)RegExp(),創(chuàng)建一個RegExp對象都是比較容易的.較為困難的任務(wù)是用正則表達式語法來描述字符的模式.JavaScript采用的是Perl語言正則表達式語法的一個相當(dāng)完整的子集.
正則表達式的模式規(guī)范是由一系列字符構(gòu)成的.大多數(shù)字符(包括所有字母數(shù)字字符)描述的都是按照字面意思進行匹配的字符.這樣說來,正則表達式/java/就和所有包含子串 "java" 的字符串相匹配.雖然正則表達式中的其它字符不是按照字面意思進行匹配的,但它們都具有特殊的意義.正則表達式 /s$/ 包含兩個字符.
第一個特殊字符 "s" 是按照字面意思與自身相匹配.第二個字符 "$" 是一個特殊字符,它所匹配的是字符串的結(jié)尾.所以正則表達式 /s$/ 匹配的就是以字母 "s" 結(jié)尾
的字符串

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市抖韩,隨后出現(xiàn)的幾起案子蛀恩,更是在濱河造成了極大的恐慌,老刑警劉巖茂浮,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件双谆,死亡現(xiàn)場離奇詭異,居然都是意外死亡席揽,警方通過查閱死者的電腦和手機顽馋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來幌羞,“玉大人寸谜,你說我怎么就攤上這事∈翳耄” “怎么了程帕?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵住练,是天一觀的道長。 經(jīng)常有香客問我愁拭,道長讲逛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任岭埠,我火速辦了婚禮盏混,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘惜论。我一直安慰自己许赃,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布馆类。 她就那樣靜靜地躺著混聊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪乾巧。 梳的紋絲不亂的頭發(fā)上句喜,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天,我揣著相機與錄音沟于,去河邊找鬼咳胃。 笑死,一個胖子當(dāng)著我的面吹牛旷太,可吹牛的內(nèi)容都是我干的展懈。 我是一名探鬼主播,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼供璧,長吁一口氣:“原來是場噩夢啊……” “哼存崖!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起睡毒,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤金句,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后吕嘀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體违寞,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年偶房,在試婚紗的時候發(fā)現(xiàn)自己被綠了趁曼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡棕洋,死狀恐怖挡闰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤摄悯,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布赞季,位于F島的核電站,受9級特大地震影響奢驯,放射性物質(zhì)發(fā)生泄漏申钩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一瘪阁、第九天 我趴在偏房一處隱蔽的房頂上張望撒遣。 院中可真熱鬧,春花似錦管跺、人聲如沸义黎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽廉涕。三九已至,卻和暖如春艇拍,著一層夾襖步出監(jiān)牢的瞬間狐蜕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工淑倾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留馏鹤,地道東北人征椒。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓娇哆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親勃救。 傳聞我的和親對象是個殘疾皇子碍讨,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,654評論 2 354

推薦閱讀更多精彩內(nèi)容