正則表達式(Regular Expression,在代碼中常簡寫爲regex、regexp或RE)是計算機科學的一個概念。正則表達式使用單個字符串來描述、匹配一系列符合某個句法規則的字符串。在不少文本編輯器裏,正則表達式一般被用來檢索、替換那些符合某個模式的文本。許多程序設計語言都支持利用正則表達式進行字符串操做。
在不少文本編輯器裏,正則表達式一般被用來檢索、替換那些符合某個模式的文本。(爲字符串定義規則,爲輸入內容定義規則!)
正則表達式用於字符串處理、表單驗證等場合,實用高效。前端
var 變量名= new RegExp(/表達式/);
var 變量名= /表達式/; console.log(regexp1.test(345)); console.log(/\d/.test(567));(直接使用)
正則對象方法,檢測測試字符串是否符合該規則,返回true和false,參數(測試字符串)正則表達式
使用語法:Boolean = 表達式.test("要驗證的內容"); console.log(/\d/.test(567)); 驗證 567 符不符合 \d 的規範
[^\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] 非單詞字符
/andy/.test(「andy」) // true /andy/.test(「andylv」) // true /andy/.test(「an」) // false 一句話,只要完整包含了andy 就能夠了(有他就行)
/[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
中括號內,前面加個元字符^進行取反,不是括號裏面的字符(一部分也不行)。
(能夠不夠,可是不能多)(不夠和正好,返回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 注意: 這個符號 ^ 必定是寫到方括號裏面
有時匹配的東西過多,並且類型又相同,所有輸入太麻煩,咱們能夠在中間加了個橫線函數
console.log(/[a-c]/.test("dghhj")); //false console.log(/[a-c]/.test("b")); //true
用中括號匹配不一樣類型的單個字符。 console.log(/[a-m1-5]/.test("b"))//true
正則表達式主要是針對字符串進行操做
,能夠簡化對字符串的複雜操做,其主要功能有匹配
、切割
、替換
、獲取
。
檢查字符串是否符合正則表達式中的規則,有一次不匹配,則返回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();
^ 會匹配行或者字符串的起始位置
注:^在[]中才表示非!這裏表示開始
$ 會匹配行或字符串的結尾位置
^$在一塊兒 表示必須是這個(精確匹配)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 這四個字母
(多個字母,重複最後一個) * (貪婪) 重複零次或更多 (>=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(沒有&,用的是,代替的) ()提升權限,有限計算
replace() 方法用於在字符串中用一些字符替換另外一些字符,或替換一個與正則表達式匹配的子串。 語法格式:(返回值是新字符串)
須要匹配的對象.replace(正則式/字符串,替換的目標字符)
正則表達式的匹配模式支持的2個標誌
g:表示全局模式(global),即模式將被應用於全部字符串而非發現一個而中止
i:表示不區分大小寫(ease-insensitive)模式,在肯定匹配想時忽略模式與字符串的大小寫regexp
封裝本身的trim 函數 function trim(str) { return str.replace(/(^\s+)|(\s+$)/g,""); // 去掉前面和後面的空格 }
數字:^[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))
若是你以爲這篇文章對你有所幫助,那就順便點個贊
吧,點贊收藏
不迷路~
黑芝麻哇,白芝麻發,黑芝麻白芝麻哇發哈!
前端哇發哈