1 正則表達(dá)式(規(guī)則表達(dá)式)
'正則表達(dá)式是對(duì)字符串操作的一種邏輯公式',
就是事先定義好的一些特定字符,以及這些特定字符發(fā)組合,
組成一個(gè)"規(guī)則字符串",這個(gè)"規(guī)則字符串"用來(lái)表達(dá)對(duì)字符串的一種過(guò)濾邏輯
- 正則表達(dá)式是一個(gè)字符串
- 表示一種規(guī)則
- 用(有)自己特定的編寫(xiě)語(yǔ)法
- 用于對(duì)其它字符串進(jìn)行驗(yàn)證或者匹配
2 與其他語(yǔ)言的關(guān)系
- 它是一獨(dú)立的體系,不依賴其他任何編程語(yǔ)言,(但是由于過(guò)于它很強(qiáng)大),其它的編程語(yǔ)言里面種會(huì)提供對(duì)正則表達(dá)式的支持
- 正則表達(dá)式在編程語(yǔ)言中的寫(xiě)法都是統(tǒng)一的(php,java,js...中的正則表達(dá)式都是一樣的)
3 案例
※※生日的判斷
<form action="http://www.baidu.com">
<input type="text" pattern="\d{4}-\d{2}-\d{2}" required placeholder="請(qǐng)輸出入生日"/>(*示例:1990-10-11)
<input type="submit" value="提交"/>
</form>

效果.png
4 js中的正則
4.1 創(chuàng)建(RegExp)
1)構(gòu)造器創(chuàng)建:
var r1 = new RegExp( "a" );
var r2 = new RegExp( "a","gim" )
new RegExp(pattern, attributes);
2)字面量創(chuàng)建(類比創(chuàng)建對(duì)象,都有兩種方法)
- 基本格式
var r = /字符串/;
說(shuō)明:類比如果是字符串,則前后都要加( " " )
如果是對(duì)象前后加{ }
如果是數(shù)組前后加[ ];
如果是正則前后加/ /(界定符);
類比:使用對(duì)象的屬性:用[]
當(dāng)屬性名是一個(gè)變量是,只能使用-[];
當(dāng)正則表達(dá)式是一個(gè)變量是,則只能使用RegExp;
4.2 正則表達(dá)式的構(gòu)成
- 1)界定符
- 2)原子(構(gòu)成正則表達(dá)式的最基本的單位,必不可少)
- 3)元字符(修飾原子的)
- 4)模式修正符
- I (忽略大小寫(xiě))
- G(全局匹配)
- M(多行)
5 原子
5.1 一個(gè)字符
- 表示一個(gè)字符
A-Z,a-z,0-9基本的字符,它們只能表示一個(gè)字符
/a/只能表示 a;
/abc/只能表示 abc.
5.2 一類字符
- 表示多個(gè)
\d表示數(shù)字:一個(gè)數(shù)字,即0-9;
\D表示:非數(shù)字;
\s:空格;
\S:非空格;
\w:表示"字";
\W:表示非"字";
6 元字符

元字符.png
- 作用:修飾它前面的一個(gè)原子,只能修飾一個(gè)原子,并且必須在它的前面
6.1 開(kāi)始&&結(jié)束
- ^ 開(kāi)始(表示目標(biāo)字符串應(yīng)該以它后面的原子開(kāi)始)
console.info(/f/.test("asfsd"));//true
console.info(/^f/.test("asfs"));//false
console.info(/^f/.test("fasfsd"));//true
- 2)$結(jié)束(表示目標(biāo)字符串應(yīng)該在它后面的原子結(jié)束)
console.info(/af$/.test("fasfsdf"))//false
console.info(/af$/.test("fasfsaf"))//true
6.2 數(shù)量的表示
- 1)+ 表示前面的 一個(gè)原子要重復(fù)一個(gè)以上
console.info(/f+/.test("abcdeg"));//false
console.info(/f+/.test("abcdeffg"));//true
- 2)? 表示前面的一個(gè)原子要重復(fù)0次或者一次
console.info(/f+/.test("abcdef"));//false
console.info(/f?/.test("abcdefg"));//true
console.info(/f?/.test("abcdeffg"));//true
- 3){最大值,最小值}表示前面的一個(gè)原子要重復(fù)[最小值,最大值]次;
console.info(/\d{1,2}/.text("0"));//true
console.info(/\d{1,2}/.text("01"));//true
console.info(/\d{1,2}/.text("012"));//true
- 4)\d{m}一定要出現(xiàn)的m次
console.info(/\d{3}/.text("0"));//false
console.info(/\d{3}/.text("00"));//false
console.info(/\d{3}/.text("000"));//true
console.info(/\d{3}/.text("0000"));//true
- 5)\d{m,}前面的原子出現(xiàn)至少m次
console.info(/\d{3,}/.text("00"));//false
console.info(/\d{3}/.text("000"));//true
console.info(/\d{3}/.text("0000"));//true
6.3 轉(zhuǎn)義的表示
- :作用改變字符的原來(lái)意思(和邏輯非內(nèi)飾 相反的進(jìn)行取結(jié)果)
- \b表示一個(gè)邊界.空格
console.log(/\bis\b/.test("abc is land"));//true
-3) \B表示一個(gè)非邊界
console.log(/is\B/.test("abcisland"));//true
6.4 常見(jiàn)的分組
- 1)表示分組:把幾個(gè)原子打包成一個(gè)大原子
console.log(/a(bc){2}/.test("abcc"));//false
console.log(/abc{2}/.text("abcc"));//true
6.5 邏輯的關(guān)系
格式:[原子1 原子2 原子3.....];
作用:[]內(nèi)的原子集合中,必須要有一個(gè)
console.log(/1[012]-[0123]\d/.test("10-10));//true
console.log(/1[012]-[0123]\d/.test("101-10));//false
console.log(/1[012]-[0123]\d/.test("111-10));//true
- 1)[ ]中的原子任何一個(gè)都可以
- 2)[ ]只能表示一個(gè)原子.
7 案例一
- 網(wǎng)頁(yè)中的常見(jiàn)的匹配驗(yàn)證