正則表達式

1.12個常用的js正則表達式

(1)在input框中只能輸入金額琅绅,其實就是只能輸入最多有兩位小數(shù)的數(shù)字**

image

(2)驗證郵箱格式

image

(3)密碼采用數(shù)字咬最、字母邮辽、特殊字符且長度為8-20位

image

(4)驗證電話號碼

image

(5)判斷是否是漢字

image

(6)是否為字母:true:是,false:不是

image

(7)判斷是否為數(shù)字

image

(8)整數(shù)的正則表達式

image

(9)是否為字母和數(shù)字

image

(10)檢驗18位身份證號碼

image

(11)驗證15位數(shù)身份證號碼中的生日是否是有效生日

image

(12)驗證18位數(shù)身份證號碼中的生日是否是有效生日

image

2.JS中通過正則表達式去除字符串中重復(fù)字符

image

\1 是捕獲組 港谊,就是第一個小括號內(nèi)的值(從左向→)

$0 匹配的整個字符串

$1第一個組 即第一個括號

$2第二個組 即第二個括號

3.JS正則表達式整理大全

正則表達式中的特殊字符

字符含意

\ 做為轉(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]字符集(characterset)革答,匹配這個集合中的任一一個字符(或元字符)

[^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]。

1.直接量字符

我們已經(jīng)發(fā)現(xiàn)了,在正則表達式中所有的字母字符和數(shù)字都是按照字面意思與自身相匹配的.JavaScript的正則表達式還通過以反斜杠()開頭的轉(zhuǎn)義序列支持某些非字母字符.例如,序列"\n" 在字符串中匹配的是一個直接量換行符.在正則表達式中,許多標點符號都有特殊的含義.下面是這些字符和它們的含義:

正則表達式的直接量字符

字符 匹配


字母數(shù)字字符 自身

\ f換頁符

\ n換行符

\ r回車

\ t制表符

\ v垂直制表符

\ /一個 / 直接量

\ \一個 \ 直接量

\ .一個 . 直接量

\ *一個 * 直接量

\ +一個 + 直接量

\ ?一個 ? 直接量

\ |一個 | 直接量

\ (一個 ( 直接量

\ )一個 ) 直接量

\ [一個 [ 直接量

\ ]一個 ] 直接量

\ {一個 { 直接量

\ }一個 } 直接量

\ XXX由十進制數(shù) XXX 指 定的ASCII碼字符

\ Xnn由十六進制數(shù) nn 指定的ASCII碼字符

\ cX控制字符^X. 例如, \cI等價于 \t, \cJ等價于\n


如果想在正則表達式中使用特殊的標點符號,必須在它們之前加上一個"" .

2.字符類

將單獨的直接符放進中括號內(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]一個退格直接量(特例)


3.復(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,}


4.選擇,分組和引用

正則表達式的語法還包括指定選擇項,對子表達式分組和引用前一子表達式的特殊字符.字符| 用于分隔供選擇的字符.例如: /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)一個正則表達式成功地和目標字符串相匹配時,可以從目標串中抽出和括號中的子模式相匹配的部分.例如,假定我們正在檢索的模式是一個或多個字母后面跟隨一位或多位數(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é)束的引號匹配(例如兩個都是雙引號或者都是單引號):

/[' "] [^ ' "]*[' "]/

如果要求開始和結(jié)束的引號匹配,我們可以使用如下的引用:

/( [' "] ) [^ ' "] * \1/\1

匹配的是第一個代括號的子表達式所匹配的模式.在這個例子中,它實施了一種規(guī)約,那就是開始的引號必須和結(jié)束的引號相匹配.注意,如果反斜杠后跟隨的數(shù)字比代括號的子表達式數(shù)多,那么它就會被解析為一個十進制的轉(zhuǎn)義序列,而不是一個引用.你可以堅持使用完整的三個字符來表示轉(zhuǎn)義序列,這們就可以避免混淆了.例如, 使用 \044,而不是\44.下面是正則表達式的選擇嫌蚤、分組和引用字符:

字符 含義


| 選擇.匹配的要么是該符號左邊的子表達式,要么它右邊的子表達式

(...)分組.將幾個項目分為一個單元.這個單元可由 *、+断傲、脱吱?和|等符號使用,而且還可以記住和這個組匹配的字符以供此后引用使用

\n和第n個分組所匹配的字符相匹配.分組是括號中的子表達式(可能是嵌套的).分組號是從左到右計數(shù)的左括號數(shù)


5.指定匹配的位置

我們已經(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匹配的是非詞語的邊界的字符


6.屬性

有關(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è)置為 true ,那么模式匹配將以多行的模式進行.在這種模式下,錨字符 ^ 和 匹配的不只是檢索字符串的開頭和結(jié)尾,還匹配檢索字符串內(nèi)部的一行的開頭和結(jié)尾.例如: 模式 /Java/ 匹配的是 "Java",但是并不匹配

"Java\nis fun" .如果我們設(shè)置了 multiline 屬性,那么后者也將被匹配:

RegExp.multiline = true;

在JAVASCRIPT里面判斷一個字符串是否是電子郵件的格式:
復(fù)制代碼代碼如下:

if(formname.email.value!=formname.email.value.match(/^\w +[@]\w +[.][\w.] +$/)){
    alert("您的電子郵件格式錯誤认罩!"); 
    formname.email.focus();
    return false;
}
function dateVerify(date){

var reg = /^(\d{4})(-)(\d{2})\2(\d{2})$/;

var r = date.match(reg);

if(r==null) return false;

var d= new Date(r[1], r[3]-1,r[4]);

var newStr=d.getFullYear()+r[2]+(d.getMonth()+1)+r[2]+d.getDate();

date=r[1]+r[2]+((r[3]-1)+1)+r[2]+((r[4]-1)+1);

return newStr==date;

}

javascript的17種正則表達式

"^\d+$" //非負整數(shù)(正整數(shù) + 0)

"^[0-9][1-9][0-9]$" //正整數(shù)

"^((-\d+)|(0+))$" //非正整數(shù)(負整數(shù) + 0)

"^-[0-9][1-9][0-9]$" //負整數(shù)

"^-?\d+$" //整數(shù)

"^\d+(\.\d+)?$" //非負浮點數(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+(\.\d+)?)|(0+(\.0+)?))$" //非正浮點數(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+)(\.\d+)?$" //浮點數(shù)

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

"^[A-Z]+$" //由26個英文字母的大寫組成的字符串

"^[a-z]+$" //由26個英文字母的小寫組成的字符串

"^[A-Za-z0-9]+$" //由數(shù)字和26個英文字母組成的字符串

"^\w+$" //由數(shù)字箱蝠、26個英文字母或者下劃線組成的字符串

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

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

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

預(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

constructor 創(chuàng)建一個對象的一個特殊的函數(shù)原型

global 是否在整個串中匹配(bool型)

ignoreCase 匹配時是否忽略大小寫(bool型)

input 被匹配的串

lastIndex 最后一次匹配的索引

lastParen 最后一個括號括起來的子串

leftContext 最近一次匹配以左的子串

multiline 是否進行多行匹配(bool型)

prototype 允許附加屬性給對象

rightContext 最近一次匹配以右的子串

source 正則表達式模式

lastIndex 最后一次匹配的索引

正則表達式對象的方法 方法 含義

compile 正則表達式比較

exec 執(zhí)行查找

test 進行匹配

toSource 返回特定對象的定義(literalrepresenting)页慷,其值可用來創(chuàng)建一個新的對象憔足。重載Object.toSource方法得到的。

toString 返回特定對象的串差购。重載Object.toString方法得到的四瘫。

valueOf 返回特定對象的原始值。重載Object.valueOf方法得到

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末欲逃,一起剝皮案震驚了整個濱河市找蜜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌稳析,老刑警劉巖洗做,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異彰居,居然都是意外死亡诚纸,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門陈惰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來畦徘,“玉大人,你說我怎么就攤上這事抬闯【荆” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵溶握,是天一觀的道長杯缺。 經(jīng)常有香客問我,道長睡榆,這世上最難降的妖魔是什么萍肆? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任袍榆,我火速辦了婚禮,結(jié)果婚禮上塘揣,老公的妹妹穿的比我還像新娘包雀。我一直安慰自己,他們只是感情好勿负,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布馏艾。 她就那樣靜靜地躺著,像睡著了一般奴愉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上铁孵,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天锭硼,我揣著相機與錄音,去河邊找鬼蜕劝。 笑死檀头,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的岖沛。 我是一名探鬼主播暑始,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼婴削!你這毒婦竟也來了廊镜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤唉俗,失蹤者是張志新(化名)和其女友劉穎嗤朴,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體虫溜,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡雹姊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了衡楞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吱雏。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖瘾境,靈堂內(nèi)的尸體忽然破棺而出歧杏,到底是詐尸還是另有隱情,我是刑警寧澤寄雀,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布得滤,位于F島的核電站,受9級特大地震影響盒犹,放射性物質(zhì)發(fā)生泄漏懂更。R本人自食惡果不足惜眨业,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望沮协。 院中可真熱鬧龄捡,春花似錦、人聲如沸慷暂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽行瑞。三九已至奸腺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間血久,已是汗流浹背突照。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留氧吐,地道東北人讹蘑。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像筑舅,于是被迫代替她去往敵國和親座慰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

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