js中常用的正規表示式【Z】

liuchang0001發表於2011-04-18

匹配中文字元的正規表示式: [u4e00-u9fa5]
評註:匹配中文還真是個頭疼的事,有了這個表示式就好辦了

匹配雙位元組字元(包括漢字在內):[^x00-xff]
評註:可以用來計算字串的長度(一個雙位元組字元長度計2,ASCII字元計1)

匹配空白行的正規表示式:ns*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個英文字母或者下劃線組成的字串

在使用RegularExpressionValidator驗證控制元件時的驗證功能及其驗證表示式介紹如下:

只能輸入數字:“^[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}$”

正確格式為:“XXXX-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]
匹配空行的正規表示式:n[s| ]*r
匹配HTML標記的正規表示式:/< (.*)>.*|< (.*) />/
匹配首尾空格的正規表示式:(^s*)|(s*$)
匹配Email地址的正規表示式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
匹配網址URL的正規表示式:http://([w-]+.)+[w-]+(/[w- ./?%&=]*)?

(1)應用:計算字串的長度(一個雙位元組字元長度計2,ASCII字元計1)
String.prototype.len=function(){return this.replace([^x00-xff]/g,”aa”).length;}

(2)應用:javascript中沒有像vbscript那樣的trim函式,我們就可以利用這個表示式來實現
String.prototype.trim = function()
{
return this.replace(/(^s*)|(s*$)/g, “”);
}
(3)應用:利用正規表示式分解和轉換IP地址
function IP2V(ip) //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!”)
}
}
(4)應用:從URL地址中提取檔名的javascript程式
s=”http://www.9499.net/page1.htm”;
s=s.replace(/(.*/){0,}([^.]+).*/ig,”$2″) ; //Page1.htm
(5)應用:利用正規表示式限制網頁表單裡的文字框輸入內容
用正規表示式限制只能輸入中文:onkeyup=”value=”/blog/value.replace(/["^u4E00-u9FA5]/g,”) ” onbeforepaste=”clipboardData.setData(’text’,clipboardData.getData(’text’).replace(/[^u4E00-u9FA5]/g,”))”
用正規表示式限制只能輸入全形字元: onkeyup=”value=”/blog/value.replace(/["^uFF00-uFFFF]/g,”) ” onbeforepaste=”clipboardData.setData(’text’,clipboardData.getData(’text’).replace(/[^uFF00-uFFFF]/g,”))”
用正規表示式限制只能輸入數字:onkeyup=”value=”/blog/value.replace(/["^d]/g,”) “onbeforepaste= “clipboardData.setData(’text’,clipboardData.getData(’text’).replace(/[^d]/g,”))”
用正規表示式限制只能輸入數字和英文:onkeyup=”value=”/blog/value.replace(/[W]/g,””) “onbeforepaste=”clipboardData.setData(’text’,clipboardData.getD

 

 

 

建立正規表示式物件語法
re = new RegExp (/pattern/[flags])

flags 引數說明:
g (全文查詢出現的所有 pattern
i (忽略大小寫)
m (多行查詢)

 

普通字元 描述
\ 將下一個字元標記為一個特殊字元、或一個原義字元、或一個 後向引用、或一個八進位制轉義符。例如,’n’ 匹配字元 “n”。’\n’ 匹配一個換行符。序列 ‘\\’ 匹配 “\” 而 “\(” 則匹配 “(”。
. 匹配除 “\n” 之外的任何單個字元。要匹配包括 ‘\n’ 在內的任何字元,請使用象 ‘[.\n]‘ 的模式。
x |y 匹配 x 或 y 。例如,’z|food’ 能匹配 “z” 或 “food”。’(z|f)ood’ 則匹配 “zood” 或 “food”。
[xyz ] 字符集合。匹配所包含的任意一個字元。例如, ‘[abc]‘ 可以匹配 “plain” 中的 ‘a’。
[^xyz ] 負值字符集合。匹配未包含的任意字元。例如, ‘[^abc]‘ 可以匹配 “plain” 中的’p'。
[a-z ] 字元範圍。匹配指定範圍內的任意字元。例如,’[a-z]‘ 可以匹配 ‘a’ 到 ‘z’ 範圍內的任意小寫字母字元。
[^a-z ] 負值字元範圍。匹配任何不在指定範圍內的任意字元。例如,’[^a-z]‘ 可以匹配任何不在 ‘a’ 到 ‘z’ 範圍內的任意字元。
\cx 匹配由x 指明的控制字元。例如, \cM 匹配一個 Control-M 或回車符。 x 的值必須為 A-Z 或 a-z 之一。否則,將 c 視為一個原義的 ‘c’ 字元。
\d 匹配一個數字字元。等價於 [0-9]。
\D 匹配一個非數字字元。等價於 [^0-9]。
\w 匹配包括下劃線的任何單詞字元。等價於’[A-Za-z0-9_]‘。
\W 匹配任何非單詞字元。等價於 ‘[^A-Za-z0-9_]‘。
\xn 匹配 n ,其中 n 為十六進位制轉義值。十六進位制轉義值必須為確定的兩個數字長。例如, ‘\x41′ 匹配 “A”。’\x041′ 則等價於 ‘\x04′ & “1″。正規表示式中可以使用 ASCII 編碼。.
\num 匹配 num ,其中 num 是一個正整數。對所獲取的匹配的引用。例如,’(.)\1′ 匹配兩個連續的相同字元。
\n 標識一個八進位制轉義值或一個後向引用。如果 \n 之前至少 n 個獲取的子表示式,則 n 為後向引用。否則,如果 n 為八進位制數字 (0-7),則n 為一個八進位制轉義值。
\nm 標識一個八進位制轉義值或一個後向引用。如果 \nm 之前至少有is preceded by at least nm 個獲取得子表示式,則 nm 為後向引用。如果 \nm 之前至少有 n 個獲取,則 n 為一個後跟文字 m 的後向引用。如果前面的條件都不滿足,若? n 和 m 均為八進位制數字 (0-7),則 \nm 將匹配八進位制轉義值 nm
\nml 如果 n 為八進位制數字 (0-3),且 m 和 l 均為八進位制數字 (0-7),則匹配八進位制轉義值 nml。
\un 匹配 n ,其中 n 是一個用四個十六進位制數字表示的 Unicode 字元。例如, \u00A9 匹配版權符號 (?)。
特殊字元 說明
$ 匹配輸入字串的結尾位置。如果設定了 RegExp 物件的 Multiline 屬性,則 $ 也匹配 ‘\n’ 或 ‘\r’。要匹配 $ 字元本身,請使用 \$。
( ) 標記一個子表示式的開始和結束位置。子表示式可以獲取供以後使用。要匹配這些字元,請使用 \( 和 \)。
* 匹配前面的子表示式零次或多次。要匹配 * 字元,請使用 \*。
+ 匹配前面的子表示式一次或多次。要匹配 + 字元,請使用 +。
. 匹配除換行符 \n之外的任何單字元。要匹配 .,請使用 \。
[ 標記一箇中括號表示式的開始。要匹配 [,請使用 \[。
? 匹配前面的子表示式零次或一次,或指明一個非貪婪限定符。要匹配 ? 字元,請使用 \?。
\ 將下一個字元標記為或特殊字元、或原義字元、或後向引用、或八進位制轉義符。例如, 'n' 匹配字元 'n'。'\n' 匹配換行符。序列 '\' 匹配 "\",而 '\(' 則匹配 "("。
^ 匹配輸入字串的開始位置,除非在方括號表示式中使用,此時它表示不接受該字符集合。要匹配 ^ 字元本身,請使用\^。
{ 標記限定符表示式的開始。要匹配 {,請使用 \{。
| 指明兩項之間的一個選擇。要匹配 |,請使用 \|。

 

非列印字元 含義
\cx 匹配由x 指明的控制字元。例如, \cM 匹配一個 Control-M 或回車符。 x 的值必須為 A-Z 或 a-z 之一。否則,將 c 視為一個原義的 'c' 字元。
\f 匹配一個換頁符。等價於 \x0c 和 \cL。
n 匹配一個換行符。等價於 x0a 和 cJ。
r 匹配一個回車符。等價於 x0d 和 cM。
\s 匹配任何空白字元,包括空格、製表符、換頁符等等。等價於 [?\f\n\r\t\v]。
\S 匹配任何非空白字元。等價於 [^?\f\n\r\t\v]。
\t 匹配一個製表符。等價於 \x09 和 \cI。
\v 匹配一個垂直製表符。等價於 \x0b 和 \cK。

 

限定符 描述
* 匹配前面的子表示式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。 * 等價於{0,}。
+ 匹配前面的子表示式一次或多次。例如,’zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等價於 {1,}。
? 匹配前面的子表示式零次或一次。例如,”do(es)?” 可以匹配 “do” 或 “does” 中的”do” 。? 等價於 {0,1}。
{n } n 是一個非負整數。匹配確定的 n 次。例如,’o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的兩個 o。
{n ,} n 是一個非負整數。至少匹配n 次。例如,’o{2,}’ 不能匹配 “Bob” 中的 ‘o’,但能匹配 “foooood” 中的所有 o。’o{1,}’ 等價於 ‘o+’。’o{0,}’ 則等價於 ‘o*’。
{n ,m } m 和 n 均為非負整數,其中n <= m 。最少匹配 n 次且最多匹配 m 次。劉, “o{1,3}” 將匹配 “fooooood” 中的前三個 o。’o{0,1}’ 等價於 ‘o?’。請注意在逗號和兩個數之間不能有空格。

 

定位符 描述
^ 匹配輸入字串的開始位置。如果設定了 RegExp 物件的 Multiline 屬性,^ 也匹配 ‘\n’ 或 ‘\r’ 之後的位置。
$ 匹配輸入字串的結束位置。如果設定了RegExp 物件的 Multiline 屬性,$ 也匹配 ‘\n’ 或 ‘\r’ 之前的位置。
\b 匹配一個單詞邊界,也就是指單詞和空格間的位置。
\B 匹配非單詞邊界。

 

是否有匹配

regexpObject.test
(
string)

返回值為Boolean型

var
 re =
 new
 RegExp(
/\bbe\b/g
)
;

var
 str =
 "To be, or not to be:That is the question:"
;

alert
(
str.search
(
re)
)
;
string.search
(
regexpObject)

返回匹配字元的位置,無匹配返回-1

var
 re =
 new
 RegExp(
/\bbe\b/g
)
;

var
 str =
 "To be, or not to be:That is the question:"
;

alert
(
re.test
(
str)
)
;

取得正則匹配資訊

regexpObject.exec
(
string)
var
 re =
 new
 RegExp(
/be/g
)
;

var
 str =
 "To be, or not to be:That is the question:"
;

var
 f;

do

{

    f =
 re.exec
(
str)
;

    alert
(
f +
 ":"
 +
 f.index
)
;

}
 while
 (
f!=
null
)
;

使用正規表示式進行字串替換

string.replace
(
re,
 replaceString)
var
 re =
 new
 RegExp(
/be/g
)
;

var
 str =
 "To be, or not to be:That is the question:"
;

alert
(
str.replace
(
re,
 "*"
)
)
;

相關文章