大話javascript 8期:正則表達式

1、正則表達式的定義

正則表達式(Regular Expression,在代碼中常簡寫爲regex、regexp或RE)是計算機科學的一個概念。正則表達式使用單個字符串來描述、匹配一系列符合某個句法規則的字符串。在不少文本編輯器裏,正則表達式一般被用來檢索、替換那些符合某個模式的文本。許多程序設計語言都支持利用正則表達式進行字符串操做。
在不少文本編輯器裏,正則表達式一般被用來檢索、替換那些符合某個模式的文本。(爲字符串定義規則,爲輸入內容定義規則!)

正則表達式用於字符串處理、表單驗證等場合,實用高效。前端

2、正則表達式聲明

1.經過構造函數定義

var 變量名= new RegExp(/表達式/);

2.經過直接量定義 (較爲經常使用)

var 變量名= /表達式/;
console.log(regexp1.test(345));
console.log(/\d/.test(567));(直接使用)

3.test() 方法

正則對象方法,檢測測試字符串是否符合該規則,返回true和false,參數(測試字符串)正則表達式

使用語法:Boolean = 表達式.test("要驗證的內容");  
console.log(/\d/.test(567));
 驗證  567 符不符合 \d 的規範

3、正則五大內部類(幫咱們寫好的工具直接使用)

1.預約義類

[^\n\r]    除了換行和回車以外的任意字符(「」不行)
 \d    [0-9]        數字字符
 \D    [^0-9]       非數字字符

 \s    [ \t\n\x0B\f\r]     空白字符 
 \S    [^ \t\n\x0B\f\r]     非空白字符

 \w    [a-zA-Z_0-9]         單詞字符
 \W    [^a-zA-Z_0-9]        非單詞字符

2.簡單類(正則://中什麼特殊符號都不寫,和[]的加入)

1)/string/.test(「string」); 必須是完整的,只多不能少

/andy/.test(「andy」)                     // true
/andy/.test(「andylv」)                  // true
/andy/.test(「an」)                      // false
一句話,只要完整包含了andy 就能夠了(有他就行)

2)/[string]/.test(「string」); 只要包含裏面的任何一個就能夠

/[andy]/.test("andy");                  // true
   /[andy]/.test("an");                    // true
   /[andy]/.test("ady");                   // true
   /[andy]/.test("anll");                   // true
   /[andy]/.test("assd");               // true
   /[andy]/.test("ss");                   // false
   /[3aH8]/.test("ss");                   // false

3.負向類(不能是其中的總體或者一部分)

中括號內,前面加個元字符^進行取反,不是括號裏面的字符(一部分也不行)。
(能夠不夠,可是不能多)(不夠和正好,返回false;多了或者沒有返回true)編輯器

console.log(/[^abc]/.test("iiii"));//true
 console.log(/[^abc]/.test("aiiii"));//只有一部分睜一隻眼閉一隻眼true
 console.log(/[^abc]/.test("abc"));//恰好爲false
 console.log(/[^abc]/.test("b"));//不夠爲false
 console.log(/[^abc]/.test("bcdef"));//只有一部分睜一隻眼閉一隻眼true
 console.log(/[^abc]/.test("abcdef"));//只有一部分睜一隻眼閉一隻眼true
注意:  這個符號 ^  必定是寫到方括號裏面

4.範圍類

有時匹配的東西過多,並且類型又相同,所有輸入太麻煩,咱們能夠在中間加了個橫線函數

console.log(/[a-c]/.test("dghhj"));   //false
console.log(/[a-c]/.test("b"));       //true

5.組合類

用中括號匹配不一樣類型的單個字符。
console.log(/[a-m1-5]/.test("b"))//true

4、正則表達式的功能

正則表達式主要是 針對字符串進行操做,能夠簡化對字符串的複雜操做,其主要功能有 匹配切割替換獲取

一、匹配

檢查字符串是否符合正則表達式中的規則,有一次不匹配,則返回false。如:工具

String str="abc";
String reg="[a-zA-Z]\\d?";//次表達式表示字符串的第一位只能是字母,第二位只能是數字或沒有
boolean flag=str.matches(reg);//返回結果爲true

二、切割

所謂切割,便是按必定的規則將字符串分割成多個子字符串,如:測試

String str="zhangsan,lishi,wangwu";
String reg=",";//表示以逗號做爲切割符
String[] arr=str.split(reg);//返回結果爲{「zhangsan」,"lisi","wangwu}

三、替換

即將字符串中符合規則的字符替換成指定字符,如:編碼

String str="sfhjhfh136hjasdf73466247fsjha8437482jfjsfh746376";
str.replaceAll("\\d{3,}","#");//表示將連續出現三個或三個以上的數字替換成「#」

四、獲取

即獲取與規格相符的字符串,其步驟爲:
①將正則表達式封裝成對象
②讓正則表達式和要操做的字符串相關聯,得到匹配器對象
③獲取正則匹配引擎
④經過引擎對符合規則的子串進行操做:如設計

String str="ming tian jiu yao fang jia le";
String reg="\\b[a-z]{3}\\b";//"//b"表示單詞邊界
Pattern p=Pattern.compile(reg);
Matcher m=p.matcher(str);// 得到匹配器
m.find();

5、正則邊界(重點)

^ 會匹配行或者字符串的起始位置
注:^在[]中才表示非!這裏表示開始
$ 會匹配行或字符串的結尾位置
^$在一塊兒 表示必須是這個(精確匹配)code

// 邊界能夠精確說明要什麼
console.log(/lily/.test("lilyname")); // true
console.log(/^lily$/.test("lily"));  // true
console.log(/^lily$/.test("ly"));   // false
console.log(/^andy$/.test("andy"));  // true
這個的最終意思就是 說, 必須是 andy 這四個字母

6、量詞(重點)

(多個字母,重複最後一個)
 *   (貪婪)   重複零次或更多   (>=0)
 +   (懶惰)   重複一次或更屢次  (>=1)
 ?    (佔有)   重複零次或一次   (0||1)  要麼有 要麼沒有
{}  重複多少次的意思   能夠有多少個  
您的銀行卡密碼只能是 6位      {6}
{n}    n次    (x=n)  
{n,}    重複n次或更多  (x>=n)
{n,m} 重複出現的次數比n多但比m少 (n<=x<=m)
*        {0,}
+        {1,}
?        {0,1}
x|y    一個 |   x  或者 y(沒有&,用的是,代替的)   
()提升權限,有限計算

7、replace 函數

replace() 方法用於在字符串中用一些字符替換另外一些字符,或替換一個與正則表達式匹配的子串。 語法格式:(返回值是新字符串)
須要匹配的對象.replace(正則式/字符串,替換的目標字符)

正則表達式的匹配模式支持的2個標誌
g:表示全局模式(global),即模式將被應用於全部字符串而非發現一個而中止
i:表示不區分大小寫(ease-insensitive)模式,在肯定匹配想時忽略模式與字符串的大小寫regexp

封裝本身的trim 函數

function trim(str) {

       return str.replace(/(^\s+)|(\s+$)/g,"");  // 去掉前面和後面的空格
}

8、經常使用的正則表達式

一、校驗數字的表達式

數字:^[0-9]*$
n位的數字:^\d{n}$
至少n位的數字:^\d{n,}$
m-n位的數字:^\d{m,n}$
零和非零開頭的數字:^(0|[1-9][0-9]*)$
非零開頭的最多帶兩位小數的數字:^([1-9][0-9]*)+(.[0-9]{1,2})?$
帶1-2位小數的正數或負數:^(-)?\d+(.\d{1,2})?$
正數、負數、和小數:^(-|+)?\d+(.\d+)?$
有兩位小數的正實數:^[0-9]+(.[0-9]{2})?$
有1~3位小數的正實數:^[0-9]+(.[0-9]{1,3})?$
非零的正整數:^[1-9]\d$ 或 ^([1-9][0-9]){1,3}$ 或 ^+?[1-9][0-9]*$
非零的負整數:^-[1-9][]0-9」$ 或 ^-[1-9]\d$
非負整數:^\d+$ 或 ^[1-9]\d*|0$
非正整數:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$
非負浮點數:^\d+(.\d+)?$ 或 ^[1-9]\d.\d|0.\d[1-9]\d|0?.0+|0$
非正浮點數:^((-\d+(.\d+)?)|(0+(.0+)?))$ 或 ^(-([1-9]\d.\d|0.\d[1-9]\d))|0?.0+|0$
正浮點數:^[1-9]\d.\d|0.\d[1-9]\d$ 或 ^(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9]))$
負浮點數:^-([1-9]\d.\d|0.\d[1-9]\d)$ 或 ^(-(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9])))$
浮點數:^(-?\d+)(.\d+)?$ 或 ^-?([1-9]\d.\d|0.\d[1-9]\d|0?.0+|0)$

二、校驗字符的表達式

漢字:^[\u4e00-\u9fa5]{0,}$
英文和數字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
長度爲3-20的全部字符:^.{3,20}$
由26個英文字母組成的字符串:^[A-Za-z]+$
由26個大寫英文字母組成的字符串:^[A-Z]+$
由26個小寫英文字母組成的字符串:^[a-z]+$
由數字和26個英文字母組成的字符串:^[A-Za-z0-9]+$
由數字、26個英文字母或者下劃線組成的字符串:^\w+$ 或 ^\w{3,20}$
中文、英文、數字包括下劃線:^[\u4E00-\u9FA5A-Za-z0-9_]+$
中文、英文、數字但不包括下劃線等符號:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
能夠輸入含有^%&’,;=?$\」等字符:[^%&’,;=?$\x22]+
禁止輸入含有~的字符:[^~\x22]+

三、特殊需求表達式

Email地址:^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*$
域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
InternetURL:[a-zA-z]+://[^\s] 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=])?$
手機號碼:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
電話號碼(「XXX-XXXXXXX」、」XXXX-XXXXXXXX」、」XXX-XXXXXXX」、」XXX-XXXXXXXX」、」XXXXXXX」和」XXXXXXXX):^((\d{3,4}-)|\d{3.4}-)?\d{7,8}$
國內電話號碼(0511-440522二、021-87888822):\d{3}-\d{8}|\d{4}-\d{7}
電話號碼正則表達式(支持手機號碼,3-4位區號,7-8位直播號碼,1-4位分機號): ((\d{11})|^((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})|(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1}))$)
身份證號(15位、18位數字),最後一位是校驗位,可能爲數字或字符X:(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)
賬號是否合法(字母開頭,容許5-16字節,容許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
密碼(以字母開頭,長度在6~18之間,只能包含字母、數字和下劃線):^[a-zA-Z]\w{5,17}$
強密碼(必須包含大小寫字母和數字的組合,不能使用特殊字符,長度在8-10之間):^(?=.\d)(?=.[a-z])(?=.*[A-Z]).{8,10}$
日期格式:^\d{4}-\d{1,2}-\d{1,2}
一年的12個月(01~09和1~12):^(0?[1-9]|1[0-2])$
一個月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$
錢的輸入格式:
有四種錢的表示形式咱們能夠接受:」10000.00」 和 「10,000.00」, 和沒有 「分」 的 「10000」 和 「10,000」:^[1-9][0-9]*$
這表示任意一個不以0開頭的數字,可是,這也意味着一個字符」0」不經過,因此咱們採用下面的形式:^(0|[1-9][0-9]*)$
一個0或者一個不以0開頭的數字.咱們還能夠容許開頭有一個負號:^(0|-?[1-9][0-9]*)$
這表示一個0或者一個可能爲負的開頭不爲0的數字.讓用戶以0開頭好了.把負號的也去掉,由於錢總不能是負的吧。下面咱們要加的是說明可能的小數部分:^[0-9]+(.[0-9]+)?$
必須說明的是,小數點後面至少應該有1位數,因此」10.」是不經過的,可是 「10」 和 「10.2」 是經過的:^[0-9]+(.[0-9]{2})?$
這樣咱們規定小數點後面必須有兩位,若是你認爲太苛刻了,能夠這樣:^[0-9]+(.[0-9]{1,2})?$
這樣就容許用戶只寫一位小數.下面咱們該考慮數字中的逗號了,咱們能夠這樣:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$
1到3個數字,後面跟着任意個 逗號+3個數字,逗號成爲可選,而不是必須:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$
備註:這就是最終結果了,別忘了」+」能夠用」*」替代若是你以爲空字符串也能夠接受的話(奇怪,爲何?)最後,別忘了在用函數時去掉去掉那個反斜槓,通常的錯誤都在這裏
xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\.[x|X][m|M][l|L]$
中文字符的正則表達式:[\u4e00-\u9fa5]
雙字節字符:[^\x00-\xff] (包括漢字在內,能夠用來計算字符串的長度(一個雙字節字符長度計2,ASCII字符計1))
空白行的正則表達式:\n\s*\r (能夠用來刪除空白行)
HTML標記的正則表達式:<(\S?)[^>]>.?|<.? /> ( 首尾空白字符的正則表達式:^\s|\s$或(^\s)|(\s$) (能夠用來刪除行首行尾的空白字符(包括空格、製表符、換頁符等等),很是有用的表達式)
騰訊QQ號:[1-9][0-9]{4,} (騰訊QQ號從10000開始)
中國郵政編碼:[1-9]\d{5}(?!\d) (中國郵政編碼爲6位數字)
IP地址:((?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d))

若是你以爲這篇文章對你有所幫助,那就順便點個贊吧,點贊收藏不迷路~

黑芝麻哇,白芝麻發,黑芝麻白芝麻哇發哈!

前端哇發哈

相關文章
相關標籤/搜索