js正則
首先我們要了解什麼是正則表達式?
正則表達式是構成搜索模式(search pattern)的字符序列。
當您搜索文本中的數據時,您可使用搜索模式來描述您搜索的內容。
正則表達式可以是單字符,或者更復雜的模式。
正則表達式可用於執行所有類型的文本搜索和文本替換操作。
創建一個正則
1、通過new創建正則
var num = new RegExp("hello", "ig");
2、省略new創建正則
var num = RegExp("hello", "ig");
3、正則常量賦值
var eg = /hello/ig;
正則可以傳入兩個參數:
1、正則主體部分,一般情況下就是字符串
2、修飾符(沒有先後順序)
i 忽略大小寫
g 全局匹配
m 換行匹配
正則表達式的常用方法
1.test
語法:正則.test(字符串);
功能:在字符串中匹配正則是否存在
返回值:如果存在返回true
如果不存在就返回false
var str = "how aRe you";
var num = /are/i; //匹配are忽略大小寫
alert(num.test(str)); //返回true
2.exec
格式:正則.exec(字符串)
功能:在字符串中匹配正則是否存在
返回值:如果存在返回一個數組,數組裏面存放着匹配的內容.如果不存在,返回null
alert(num.exec(str)); //返回aRe
正則可以用的四個字符串方法
match
語法:字符串.match(正則)
功能:在字符串中匹配這個正則是否存在
返回值:如果存在,返回一個數組,數組放着,匹配到的子串.如果不存在,返回null
var str = "how are Are ARE you";
var num = /arex/ig;
alert(str.match(num)); //are,Are,ARE
search
語法:字符串.search(正則)
功能:在字符串中,查找正則表達式,第一次出現的位置
返回值:如果查找到,返回,查找到的下標.查找不到,返回-1
var str = "how ARE are you";
var num = /are/i;
alert(str.search(num)); //4
replace
語法:字符串.replace(正則, newStr);
功能:在字符串中找到正則,並且將他替換成新字符串。
返回值:替換成功的新字符串
var str = "how are Are ARE you";
var num = /are/ig;
var newStr = str.replace(num, "two");
alert(newStr); //how two two two you
split
語法:字符串.split(正則)
功能:使用正則對字符串進行字符串分割
返回值:分割完的子串組成的數組。
var str = "how are Are ARE you";
var num = /are/i;
var arr = str.split(num);
alert(arr); //how , , , you
元字符
元字符就是正則表達式中有特殊含義的字符。
單個字符
. 匹配單個任意字符
[範圍] 匹配單個範圍內的字符
[0-9] 匹配單個的數字字符
[a-zA-Z0-9_] 匹配單個數字、字母或者下劃線字符
[^範圍] 匹配單個除範圍內的字符
\d 等價於 [0-9] 匹配單個的數字字符
\D 等價於 [^0-9] 匹配單個的非數字字符
\w 等價於[a-zA-Z0-9_] 匹配單個數字、字母或者下劃線字符
\W 等價於[^a-zA-Z0-9_] 匹配非單個數字、字母或者下劃線字符
空白字符
\s 匹配任意的空白字符 空格、回車、換行(\n)、tab鍵
\S 匹配任意的非空白字符
錨字符(必須用在正則表達式的開頭和結尾)
^ 行首匹配
$ 行尾匹配
重複字符(x代表任意的單個字符或者任意的單個元字符)
x+ 至少匹配一個x字符
x? 匹配0個或者1個x字符
x* 匹配任意個x字符
x{m,n} 匹配至少m個,至多n個x字符
x{n} 匹配n個x字符
(xyz) 凡是通過小括號括起來的多個字符,當做一個字符進行處理
替代字符
|
如果需要在正則表達式中用元字符本來的字符含義,必須經過轉義。
\. 代表字符.的意思
\* 代表字符*的意思
javascript的一些正則表達式
"^\d+$" //非負整數(正整數 + 0)
"^[0-9][1-9][0-9]$" //正整數
"^((-\d+)|(0+))$" //非正整數(負整數 + 0)
"^-[0-9][1-9][0-9]$" //負整數
"^-?\d+$" //整數
"^\d+(\.\d+)?$" //非負浮點數(正浮點數 + 0)
"^(([0-9]+\.[0-9][1-9][0-9])|([0-9][1-9][0-9]\.[0-9]+)|([0-9][1-9][0-9]))$" //正浮點數
"^((-\d+(\.\d+)?)|(0+(\.0+)?))$" //非正浮點數(負浮點數 + 0)
"^(-(([0-9]+\.[0-9][1-9][0-9])|([0-9][1-9][0-9]\.[0-9]+)|([0-9][1-9][0-9])))$" //負浮點數
"^(-?\d+)(\.\d+)?$" //浮點數
"^[A-Za-z]+$" //由26個英文字母組成的字符串
"^[A-Z]+$" //由26個英文字母的大寫組成的字符串
"^[a-z]+$" //由26個英文字母的小寫組成的字符串
"^[A-Za-z0-9]+$" //由數字和26個英文字母組成的字符串
"^\w+$" //由數字、26個英文字母或者下劃線組成的字符串
"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$" //email地址
"^[a-zA-z]+://(\w+(-\w+))(\.(\w+(-\w+)))(\?\S)?$" //url
正則一些常見的案例
驗證郵政編碼
var num = /^[1-9]\d{5}$/;
alert(num.test("100000")); //true
alert(num.test("5n8000")); //false
判斷文件名是否是壓縮包
var num = /^\w+\.(zip|rar|rg)$/i;
alert(num.test("1.zip")); //true
alert(num.test("666.rzr")); //false
匹配一個字符串是純中文組成的字符串
//“\u4e00”和“\u9fa5”是unicode編碼,並且正好是中文編碼的開始和結束的兩個值
var num = /^[\u4e00-\u9fa5]+$/;
alert(num.test("我是中國1人爲武漢加油")); //false
alert(num.test("我是中國人爲武漢加油")); //true
手機號碼驗證
var num = /^1\d{10}$/ //首數字必須爲1
alert(num.test("123n1231231)); //false
alert(num.test("12311231231)); //true
身份證驗證
idCard=/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/;
alert(idCard.test("440811199809162822")) //true
alert(idCard.test("44081119980916282X")) //true
alert(idCard.test("4408111n9809162822")) //false