Regex中的特殊字元
|
字元 |
含意 |
|
\ |
做為轉意,即通常在"\"後面的字元不按原來意義解釋,如/b/匹配字元"b",當b前面加了反斜杆後/\b/,轉意為匹配一個單詞的邊界。
-或-
對Regex功能字元的還原,如"*"匹配它前面元字元0次或多次,/a*/將匹配a,aa,aaa,加了"\"後,/a\*/將只匹配"a*"。 |
|
^ |
匹配一個輸入或一行的開頭,/^a/匹配"an A",而不匹配"An a" |
|
$ |
匹配一個輸入或一行的結尾,/a$/匹配"An a",而不匹配"an A" |
|
* |
匹配前面元字元0次或多次,/ba*/將匹配b,ba,baa,baaa |
|
+ |
匹配前面元字元1次或多次,/ba*/將匹配ba,baa,baaa |
|
? |
匹配前面元字元0次或1次,/ba*/將匹配b,ba |
|
(x) |
匹配x儲存x在名為$1...$9的變數中 |
|
x|y |
匹配x或y |
|
{n} |
精確匹配n次 |
|
{n,} |
匹配n次以上 |
|
{n,m} |
匹配n-m次 |
|
[xyz] |
字元集(character set),匹配這個集合中的任一一個字元(或元字元) |
|
[^xyz] |
不匹配這個集合中的任何一個字元 |
|
[\b] |
匹配一個退格符 |
|
\b |
匹配一個單詞的邊界 |
|
\B |
匹配一個單詞的非邊界 |
|
\cX |
這兒,X是一個控制符,/\cM/匹配Ctrl-M |
|
\d |
匹配一個字數字元,/\d/ = /[0-9]/ |
|
\D |
匹配一個非字數字元,/\D/ = /[^0-9]/ |
|
\n |
匹配一個分行符號 |
|
\r |
匹配一個斷行符號符 |
|
\s |
匹配一個空白字元,包括\n,\r,\f,\t,\v等 |
|
\S |
匹配一個非空白字元,等於/[^\n\f\r\t\v]/ |
|
\t |
匹配一個定位字元 |
|
\v |
匹配一個重直定位字元 |
|
\w |
匹配一個可以組成單詞的字元(alphanumeric,這是我的意譯,含數字),包括底線,如[\w]匹配"$5.98"中的5,等於[a-zA-Z0-9] |
|
\W |
匹配一個不可以組成單詞的字元,如[\W]匹配"$5.98"中的$,等於[^a-zA-Z0-9]。 |
如果想在Regex中使用特殊的標點符號,必須在它們之前加上一個 "\" .
或多次的模式.下面的表列出了複製文法.先看一個例子:
/\d{2, 4}/ //匹配2到4間的數字.
/\w{3} \d?/ //匹配三個單字字元和一個任意的數字.
/\s+java\s+/ //匹配字串"java" ,並且該串前後可以有一個或多個空格.
/[^"] * / //匹配零個或多個非引號字元.
Regex的複製字元
字元 含義
__________________________________________________________________
{n, m} 匹配前一項至少n次,但是不能超過m次
{n, } 匹配前一項n次,或者多次
{n} 匹配前一項恰好n次
? 匹配前一項0次或1次,也就是說前一項是可選的. 等價於 {0, 1}
+ 匹配前一項1次或多次,等價於{1,}
* 匹配前一項0次或多次.等價於{0,}
___________________________________________________________________
|
Regex對象的屬性及方法
預定義的Regex擁有有以下靜態屬性:input, multiline, lastMatch, lastParen, leftContext, rightContext和$1到$9。其中input和multiline可以預設定。其他屬性的值在執行過exec或test方法後被根據不同條件賦以不同的值。許多屬性同時擁有長和短(perl風格)的兩個名字,並且,這兩個名字指向同一個值。(JavaScript類比perl的Regex)
Regex對象的屬性
| 屬性 |
含義 |
| $1...$9 |
如果它(們)存在,是匹配到的子串 |
| $_ |
參見input |
| $* |
參見multiline |
| $& |
參見lastMatch |
| $+ |
參見lastParen |
| $` |
參見leftContext |
| $'' |
參見rightContext |
| constructor |
建立一個對象的一個特殊的函數原型 |
| global |
是否在整個串中匹配(bool型) |
| ignoreCase |
匹配時是否忽略大小寫(bool型) |
| input |
被匹配的串 |
| lastIndex |
最後一次匹配的索引 |
| lastParen |
最後一個括弧括起來的子串 |
| leftContext |
最近一次匹配以左的子串 |
| multiline |
是否進行多行匹配(bool型) |
| prototype |
允許附加屬性給對象 |
| rightContext |
最近一次匹配以右的子串 |
| source |
Regex模式 |
| lastIndex |
最後一次匹配的索引 |
|
Regex對象的方法
| 方法 |
含義 |
| compile |
Regex比較 |
| exec |
執行尋找 |
| test |
進行匹配 |
| toSource |
返回特定對象的定義(literal representing),其值可用來建立一個新的對象。重載Object.toSource方法得到的。 |
| toString |
返回特定對象的串。重載Object.toString方法得到的。 |
| valueOf |
返回特定對象的原始值。重載Object.valueOf方法得到 |
|
例子
<script language = "JavaScript">
var myReg = /(w+)s(w+)/;
var str = "John Smith";
var newstr = str.replace(myReg, "$2, $1");
document.write(newstr);
</script>
將輸出"Smith, John"
|
javascriptRegex檢驗
//校正是否全由數字組成
function isDigit(s)
{
var patrn=/^[0-9]{1,20}$/;
if (!patrn.exec(s)) return false
return true
}
//校正登入名稱:只能輸入5-20個以字母開頭、可帶數字、“_”、“.”的字串
function isRegisterUserName(s)
{
var patrn=/^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){4,19}$/;
if (!patrn.exec(s)) return false
return true
}
//校正使用者姓名:只能輸入1-30個以字母開頭的字串
function isTrueName(s)
{
var patrn=/^[a-zA-Z]{1,30}$/;
if (!patrn.exec(s)) return false
return true
}
//校正密碼:只能輸入6-20個字母、數字、底線
function isPasswd(s)
{
var patrn=/^(\w){6,20}$/;
if (!patrn.exec(s)) return false
return true
}
//校正普通電話、傳真號碼:可以“+”開頭,除數字外,可含有“-”
function isTel(s)
{
//var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?(\d){1,12})+$/;
var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;
if (!patrn.exec(s)) return false
return true
}
//校正手機號碼:必須以數字開頭,除數字外,可含有“-”
function isMobil(s)
{
var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;
if (!patrn.exec(s)) return false
return true
}
//校正郵遞區號
function isPostalCode(s)
{
//var patrn=/^[a-zA-Z0-9]{3,12}$/;
var patrn=/^[a-zA-Z0-9 ]{3,12}$/;
if (!patrn.exec(s)) return false
return true
}
//校正搜尋索引鍵
function isSearch(s)
{
var patrn=/^[^`~!@#$%^&*()+=|\\\][\]\{\}:;'\,.<>/?]{1}[^`~!@$%^&()+=|\\\][\]\{\}:;'\,.<>?]{0,19}$/;
if (!patrn.exec(s)) return false
return true
}
function isIP(s) //by zergling
{
var patrn=/^[0-9.]{1,20}$/;
if (!patrn.exec(s)) return false
return true
}
用法:
方法一:
var re=/Regex/;
re.test($("txtid").val())
方法二:
$("txtid").val.match(/Regex/);
附:
驗證數位Regex集(轉載)
驗證數字:^[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]*$
驗證非負整數(正整數 + 0) ^\d+$
驗證非正整數(負整數 + 0) ^((-\d+)|(0+))$
驗證長度為3的字元:^.{3}$
非Null 字元串:/\S{4,20}/ 長度為4-20
驗證由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-./?%&=]*)?$ ;^[a-zA-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$
驗證電話號碼:^(\(\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。
整數:^-?\d+$
非負浮點數(正浮點數 + 0):^\d+(\.\d+)?$
正浮點數 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
非正浮點數(負浮點數 + 0) ^((-\d+(\.\d+)?)|(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+)?
參考:
http://www.blogjava.net/onejavaer/articles/79070.html
http://www.cnblogs.com/commas/archive/2010/07/28/1787311.html
http://www.cnblogs.com/qyz123/archive/2007/05/12/743537.html
http://topic.csdn.net/u/20120228/11/88A6FD52-DE02-4C3E-9F97-A1FFE2FBAB24.html