天天看點

工作中常用正規表達式總結

最近經常用各種各樣的正規表達式比對字元串,為了友善檢視,現總結如下:

整數或者小數:^[0-9]+\.{0,1}[0-9]{0,2}$
隻能輸入數字:”^[0-9]*$”
隻能輸入n位的數字:”^\d{n}$”
隻能輸入至少n位的數字:”^\d{n,}$”
隻能輸入m~n位的數字:”^\d{m,n}$”
隻能輸入零和非零開頭的數字:”^(0|[1-9][0-9]*)$”。
隻能輸入有兩位小數的正實數:”^[0-9]+(.[0-9]{2})?$”。
隻能輸入有1~3位小數的正實數:”^[0-9]+(.[0-9]{1,3})?$”。
隻能輸入非零的正整數:”^\+?[1-9][0-9]*$”。
隻能輸入非零的負整數:”^\-[1-9][]0-9″*$。
隻能輸入長度為3的字元:”^.{3}$”。
隻能輸入由26個英文字母組成的字元串:”^[A-Za-z]+$”。
隻能輸入由26個大寫英文字母組成的字元串:”^[A-Z]+$”。
隻能輸入由26個小寫英文字母組成的字元串:”^[a-z]+$”。
隻能輸入由數字和26個英文字母組成的字元串:”^[A-Za-z0-9]+$”。
隻能輸入由數字、26個英文字母或者下劃線組成的字元串:”^\w+$”。
驗證使用者密碼:”^[a-zA-Z]\w{5,17}$”
正确格式為:以字母開頭,長度在6~18之間,隻能包含字元、數字和下劃線。驗證是否含有^%&’,;=?$\”等字元:”[^%&',;=?$\x22]+”。
隻能輸入漢字:”^[\u4e00-\u9fa5]{0,}$”
驗證Email位址:”^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$”。
驗證InternetURL:”^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$”。
驗證電話号碼:”^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$”
正确格式為:”XXX-XXXXXXX”、”XXXX-XXXXXXXX”、”XXX-XXXXXXX”、”XXX-XXXXXXXX”、”XXXXXXX”和”XXXXXXXX”。
驗證身份證号(15位或18位數字):”^\d{15}|\d{18}$”。
驗證一年的12個月:”^(0?[1-9]|1[0-2])$”
正确格式為:”01″~”09″和”1″~”12″。
驗證一個月的31天:”^((0?[1-9])|((1|2)[0-9])|30|31)$”
正确格式為;”01″~”09″和”1″~”31″。
比對中文字元的正規表達式: [\u4e00-\u9fa5]
比對雙位元組字元(包括漢字在内):[^\x00-\xff]
應用:計算字元串的長度(一個雙位元組字元長度計2,ASCII字元計1)String.prototype.len=function(){return this.replace(/[^\x00-\xff]/g,”aa”).length;}
比對空行的正規表達式:\n[\s| ]*\r
比對html标簽的正規表達式:<(.*)>(.*)<\/(.*)>|<(.*)\/>
比對首尾空格的正規表達式:(^\s*)|(\s*$)
應用:javascript中沒有像vbscript那樣的trim函數,我們就可以利用這個表達式來實作,如下:String.prototype.trim = function(){return this.replace(/(^\s*)|(\s*$)/g, “”);}
利用正規表達式分解和轉換IP位址:
下面是利用正規表達式比對IP位址,并将IP位址轉換成對應數值的Javascript程式:
function IP2V(ip){re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //比對IP位址的正規表達式
if(re.test(ip)){return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1}else{throw new Error(“Not a valid IP address!”)}}

不過上面的程式如果不用正規表達式,而直接用split函數來分解可能更簡單,程式如下:
var ip=”10.100.20.168″ip=ip.split(“.”)alert(“IP值是:”+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))
比對Email位址的正規表達式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
比對網址URL的正規表達式:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
利用正規表達式限制網頁表單裡的文本框輸入内容:
用正規表達式限制隻能輸入中文:onkeyup=”value=value.replace(/[^\u4E00-\u9FA5]/g,”)” onbeforepaste=”clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\u4E00-\u9FA5]/g,”))”
用正規表達式限制隻能輸入全角字元: onkeyup=”value=value.replace(/[^\uFF00-\uFFFF]/g,”)” onbeforepaste=”clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\uFF00-\uFFFF]/g,”))”
用正規表達式限制隻能輸入數字:onkeyup=”value=value.replace(/[^\d]/g,”) “onbeforepaste=”clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\d]/g,”))”
用正規表達式限制隻能輸入數字和英文:onkeyup=”value=value.replace(/[\W]/g,”) “onbeforepaste=”clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\d]/g,”))”
比對中文字元的正規表達式: [\u4e00-\u9fa5]
評注:比對中文還真是個頭疼的事,有了這個表達式就好辦了比對雙位元組字元(包括漢字在内):[^\x00-\xff]
評注:可以用來計算字元串的長度(一個雙位元組字元長度計2,ASCII字元計1)比對空白行的正規表達式:\n\s*\r
評注:可以用來删除空白行比對HTML标記的正規表達式:<(\S*?)[^>]*>.*?|<.*? />
評注:網上流傳的版本太糟糕,上面這個也僅僅能比對部分,對于複雜的嵌套标記依舊無能為力比對首尾空白字元的正規表達式:^\s*|\s*$
評注:可以用來删除行首行尾的空白字元(包括空格、制表符、換頁符等等),非常有用的表達式比對Email位址的正規表達式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
評注:表單驗證時很實用比對網址URL的正規表達式:[a-zA-z]+://[^\s]*
評注:網上流傳的版本功能很有限,上面這個基本可以滿足需求比對帳号是否合法(字母開頭,允許5-16位元組,允許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
評注:表單驗證時很實用比對國内電話号碼:\d{3}-\d{8}|\d{4}-\d{7}評注:比對形式如 0511-4405222 或 021-87888822比對騰訊QQ号:[1-9][0-9]{4,}
評注:騰訊QQ号從10000開始比對中國郵政編碼:[1-9]\d{5}(?!\d)
評注:中國郵政編碼為6位數字比對身份證:\d{15}|\d{18}
評注:中國的身份證為15位或18位比對ip位址:\d+\.\d+\.\d+\.\d+
評注:提取ip位址時有用比對特定數字:^[1-9]\d*$
//比對正整數^-[1-9]\d*$
//比對負整數^-?[1-9]\d*$
//比對整數^[1-9]\d*|0$
//比對非負整數(正整數 + 0)^-[1-9]\d*|0$
//比對非正整數(負整數 + 0)^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$
//比對正浮點數^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$
//比對負浮點數^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$
//比對浮點數^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$
//比對非負浮點數(正浮點數 + 0)^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$  //比對非正浮點數(負浮點數 + 0)評注:處理大量資料時有用,具體應用時注意修正比對特定字元串:^[A-Za-z]+$
//比對由26個英文字母組成的字元串^[A-Z]+$
//比對由26個英文字母的大寫組成的字元串^[a-z]+$
//比對由26個英文字母的小寫組成的字元串^[A-Za-z0-9]+$
//比對由數字和26個英文字母組成的字元串^\w+$
//比對由數字、26個英文字母或者下劃線組成的字元串評注:最基本也是最常用的一些表達式整理出來的一些常用的正規表達式 所屬分類: JScript


Email : /^\w+([-+.]\w+)*@\w+([-.]\\w+)*\.\w+([-.]\w+)*$/
isEmail1 : /^\w+([\.\-]\w+)*\@\w+([\.\-]\w+)*\.\w+$/;
isEmail2 : /^.*@[^_]*$/;
Phone : /^((\(\d{3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}$/
Mobile : /^((\(\d{3}\))|(\d{3}\-))?13\d{9}$/
Url : /^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\’:+!]*([^<>\"\"])*$/
IdCard : /^\d{15}(\d{2}[A-Za-z0-9])?$/
Currency : /^\d+(\.\d+)?$/
Number : /^\d+$/
Code : /^[1-9]\d{5}$/
QQ : /^[1-9]\d{4,8}$/
Integer : /^[-\+]?\d+$/
Double : /^[-\+]?\d+(\.\d+)?$/
English : /^[A-Za-z]+$/
Chinese : /^[\u0391-\uFFE5]+$/
UnSafe : /^(([A-Z]*|[a-z]*|\d*|[-_\~!@#\$%\^&\*\.\(\)\[\]\{\}<>\?\\\/\’\”]*)|.{0,5})$|\s/
PassWord :^[\\w]{6,12}$
ZipCode : ^[\\d]{6}/^(\+\d+ )?(\(\d+\) )?[\d ]+$/;

//這個是國際通用的電話号碼判斷/^(1[0-2]\d|\d{1,2})$/;
//這個是年齡的判斷/^\d+\.\d{2}$/;
//這個是判斷輸入的是否為貨币值
應用:計算字元串的長度(一個雙位元組字元長度計2,ASCII字元計1)String.prototype.len=function(){return this.replace([^\x00-\xff]/g,”aa”).length;}
應用:javascript中沒有像vbscript那樣的trim函數,我們就可以利用這個表達式來實作,如下:String.prototype.trim = function(){return this.replace(/(^\s*)|(\s*$)/g, “”);}
比對空行的正規表達式:\n[\s| ]*\r
比對HTML标記的正規表達式:/<(.*)>.*<\/\1>|<(.*) \/>/
比對首尾空格的正規表達式:(^\s*)|(\s*$)
比對Email位址的正規表達式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
比對網址URL的正規表達式:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?^\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+)?$

           

附件:正規表達式的文法規則

字元:x

含義:代表的是字元x

例如:比對規則為 “a”,那麼需要比對的字元串内容就是 ”a”

字元:\\

含義:代表的是反斜線字元’’

例如:比對規則為"\" ,那麼需要比對的字元串内容就是 ”\”

字元:\t

含義:制表符

例如:比對規則為"\t" ,那麼對應的效果就是産生一個制表符的空間

字元:\n

含義:換行符

例如:比對規則為"\n",那麼對應的效果就是換行,光标在原有位置的下一行

字元:\r

含義:回車符

例如:比對規則為"\r" ,那麼對應的效果就是回車後的效果,光标來到下一行行首

字元類:[abc]

含義:代表的是字元a、b 或 c

例如:比對規則為"[abc]" ,那麼需要比對的内容就是字元a,或者字元b,或字元c的一個

字元類:[^abc]

含義:代表的是除了 a、b 或 c以外的任何字元

例如:比對規則為"[^abc]",那麼需要比對的内容就是不是字元a,或者不是字元b,或不是字元c的任意一個字元

字元類:[a-zA-Z]

含義:代表的是a 到 z 或 A 到 Z,兩頭的字母包括在内

例如:比對規則為"[a-zA-Z]",那麼需要比對的是一個大寫或者小寫字母

字元類:[0-9]

含義:代表的是 0到9數字,兩頭的數字包括在内

例如:比對規則為"[0-9]",那麼需要比對的是一個數字

字元類:[a-zA-Z_0-9]

含義:代表的字母或者數字或者下劃線(即單詞字元)

例如:比對規則為" [a-zA-Z_0-9] ",那麼需要比對的是一個字母或者是一個數字或一個下滑線

預定義字元類:.

含義:代表的是任何字元

例如:比對規則為" . “,那麼需要比對的是一個任意字元。如果,就想使用 . 的話,使用比對規則”\."來實作

預定義字元類:\d

含義:代表的是 0到9數字,兩頭的數字包括在内,相當于[0-9]

例如:比對規則為"\d ",那麼需要比對的是一個數字

預定義字元類:\w

含義:代表的字母或者數字或者下劃線(即單詞字元),相當于[a-zA-Z_0-9]

例如:比對規則為"\w ",,那麼需要比對的是一個字母或者是一個數字或一個下滑線

邊界比對器:^

含義:代表的是行的開頭

例如:比對規則為1[0-9]$ ,那麼需要比對的内容從[abc]這個位置開始, 相當于左雙引号

邊界比對器:$

含義:代表的是行的結尾

例如:比對規則為2[0-9]$ ,那麼需要比對的内容以[0-9]這個結束, 相當于右雙引号

邊界比對器:\b

含義:代表的是單詞邊界

例如:比對規則為"\b[abc]\b" ,那麼代表的是字母a或b或c的左右兩邊需要的是非單詞字元([a-zA-Z_0-9])

數量詞:X?

含義:代表的是X出現一次或一次也沒有

例如:比對規則為"a?",那麼需要比對的内容是一個字元a,或者一個a都沒有

數量詞:X*

含義:代表的是X出現零次或多次

例如:比對規則為"a*" ,那麼需要比對的内容是多個字元a,或者一個a都沒有

數量詞:X+

含義:代表的是X出現一次或多次

例如:比對規則為"a+",那麼需要比對的内容是多個字元a,或者一個a

數量詞:X{n}

含義:代表的是X出現恰好 n 次

例如:比對規則為"a{5}",那麼需要比對的内容是5個字元a

數量詞:X{n,}

含義:代表的是X出現至少 n 次

例如:比對規則為"a{5, }",那麼需要比對的内容是最少有5個字元a

數量詞:X{n,m}

含義:代表的是X出現至少 n 次,但是不超過 m 次

例如:比對規則為"a{5,8}",那麼需要比對的内容是有5個字元a 到 8個字元a之間

  1. abc ↩︎
  2. abc ↩︎

繼續閱讀