正則表達(dá)式中的特殊字符
|
用re = new RegExp("pattern",["flags"]) 的方式比較好 |
vaScript動態(tài)正則表達(dá)式問題
請問正則表達(dá)式可以動態(tài)生成嗎? |
|
[JAVA]
javascript 正則表達(dá)式
秋雨葉 發(fā)表于 2004-12-9 14:54:13 |
|||
|
[RED]function dateVerify(date){
var reg = /^(\d{4})(-)(\d{2})\2(\d{2})$/;
var r = date.match(reg);
if(r==null) return false;
var d= new Date(r[1], r[3]-1,r[4]);
var newStr=d.getFullYear()+r[2]+(d.getMonth()+1)+r[2]+d.getDate();
date=r[1]+r[2]+((r[3]-1)+1)+r[2]+((r[4]-1)+1);
return newStr==date;
}[/RED]
|
JavaScript中的正則表達(dá)式(2) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
作者 :中國論壇網(wǎng)收集 來源 :http://www.51one.net 加入時(shí)間 :2004-8-25 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
正則表達(dá)式對象的屬性及方法
正則表達(dá)式對象的方法
<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"
|
javascript正則表達(dá)式檢驗(yàn)
責(zé)任編輯:fuxing [ 網(wǎng)人帝國 ] 添加時(shí)間:2003-11-13 9:13:00 人氣:1169 【 大 中 小 】 |
/*********************************************************************************
* EO_JSLib.js
* javascript正則表達(dá)式檢驗(yàn)
**********************************************************************************/
//校驗(yàn)是否全由數(shù)字組成
function isDigit(s)
{
var patrn=/^[0-9]{1,20}$/;
if (!patrn.exec(s)) return false
return true
}
//校驗(yàn)登錄名:只能輸入5-20個(gè)以字母開頭、可帶數(shù)字、“_”、“.”的字串
function isRegisterUserName(s)
{
var patrn=/^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){4,19}$/;
if (!patrn.exec(s)) return false
return true
}
//校驗(yàn)用戶姓名:只能輸入1-30個(gè)以字母開頭的字串
function isTrueName(s)
{
var patrn=/^[a-zA-Z]{1,30}$/;
if (!patrn.exec(s)) return false
return true
}
//校驗(yàn)密碼:只能輸入6-20個(gè)字母、數(shù)字、下劃線
function isPasswd(s)
{
var patrn=/^(\w){6,20}$/;
if (!patrn.exec(s)) return false
return true
}
//校驗(yàn)普通電話、傳真號碼:可以“+”開頭,除數(shù)字外,可含有“-”
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
}
//校驗(yàn)手機(jī)號碼:必須以數(shù)字開頭,除數(shù)字外,可含有“-”
function isMobil(s)
{
var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;
if (!patrn.exec(s)) return false
return true
}
//校驗(yàn)郵政編碼
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
}
//校驗(yàn)搜索關(guān)鍵字
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
}
正則表達(dá)式regular expression詳述(一)
http://www.kymita.com/888.asp 2002-12-15 藍(lán)箭工作室
正則表達(dá)式是regular expression,看來英文比中文要好理解多了,就是檢查表達(dá)式符
不符合規(guī)定!!正則表達(dá)式有一個(gè)功能十分強(qiáng)大而又十分復(fù)雜的對象RegExp,在JavaScript1.2 版本以
上提供。
下面我們看看有關(guān)正則表達(dá)式的介紹:
正則表達(dá)式對象用來規(guī)范一個(gè)規(guī)范的表達(dá)式(也就是表達(dá)式符不符合特定的要求,比如是不是Email
地址格式等),它具有用來檢查給出的字符串是否符合規(guī)則的屬性和方法。
除此之外,你用RegExp構(gòu)造器建立的個(gè)別正則表達(dá)式對象的屬性,就已經(jīng)預(yù)先定義好了正則表達(dá)式
對象的靜態(tài)屬性,你可以隨時(shí)使用它們。
核心對象:
在JavaScript 1.2, NES 3.0以上版本提供。
在JavaScript 1.3以后版本增加了toSource方法。
建立方法:
文字格式或RegExp構(gòu)造器函數(shù)。
文字建立格式使用以下格式:
/pattern/flags即/模式/標(biāo)記
構(gòu)造器函數(shù)方法使用方法如下:
new RegExp("pattern"[, "flags"])即new RegExp("模式"[,"標(biāo)記"])
參數(shù):
pattern(模式)
表示正則表達(dá)式的文本
flags(標(biāo)記)
如果指定此項(xiàng),flags可以是下面值之一:
g: global match(全定匹配)
i: ignore case(忽略大小寫)
gi: both global match and ignore case(匹配所有可能的值,也忽略大小寫)
注意:文本格式中的參數(shù)不要使用引號標(biāo)記,而構(gòu)造器函數(shù)的參數(shù)則要使用引號標(biāo)記。所以下面的
表達(dá)式建立同樣的正則表達(dá)式:
/ab+c/i
new RegExp("ab+c", "i")
描述:
當(dāng)使用構(gòu)造函數(shù)的時(shí)候,必須使用正常的字符串避開規(guī)則(在字符串中加入前導(dǎo)字符\ )是必須的。
例如,下面的兩條語句是等價(jià)的:
re = new RegExp("\\w+")
re = /\w+/
下面的提供了在正則表達(dá)式中能夠使用的完整對特殊字符的一個(gè)完整的列表和描述。
表1.3:正則表達(dá)式中的特殊字符:
字符\
意義:對于字符,通常表示按字面意義,指出接著的字符為特殊字符,\不作解釋。
例如:/b/匹配字符'b',通過在b 前面加一個(gè)反斜杠\,也就是/\b/,則該字符變成特殊字符,表示
匹配一個(gè)單詞的分界線。
或者:
對于幾個(gè)字符,通常說明是特殊的,指出緊接著的字符不是特殊的,而應(yīng)該按字面解釋。
例如:*是一個(gè)特殊字符,匹配任意個(gè)字符(包括0個(gè)字符);例如:/a*/意味匹配0個(gè)或多個(gè)a。
為了匹配字面上的*,在a前面加一個(gè)反斜杠;例如:/a\*/匹配'a*'。
字符^
意義:表示匹配的字符必須在最前邊。
例如:/^A/不匹配"an A,"中的'A',但匹配"An A."中最前面的'A'。
字符$
意義:與^類似,匹配最末的字符。
例如:/t$/不匹配"eater"中的't',但匹配"eat"中的't'。
字符*
意義:匹配*前面的字符0次或n次。
例如:/bo*/匹配"A ghost booooed"中的'boooo'或"A bird warbled"中的'b',但不匹配"A goat g
runted"中的任何字符。
字符+
意義:匹配+號前面的字符1次或n次。等價(jià)于{1,}。
例如:/a+/匹配"candy"中的'a'和"caaaaaaandy."中的所有'a'。
字符?
意義:匹配?前面的字符0次或1次。
例如:/e?le?/匹配"angel"中的'el'和"angle."中的'le'。
字符.
意義:(小數(shù)點(diǎn))匹配除換行符外的所有單個(gè)的字符。
例如:/.n/匹配"nay, an apple is on the tree"中的'an'和'on',但不匹配'nay'。
字符(x)
意義:匹配'x'并記錄匹配的值。
例如:/(foo)/匹配和記錄"foo bar."中的'foo'。匹配子串能被結(jié)果數(shù)組中的素[1], ..., [n] 返
回,或被RegExp對象的屬性$1, ..., $9返回。
字符x|y
意義:匹配'x'或者'y'。
例如:/green|red/匹配"green apple"中的'green'和"red apple."中的'red'。
字符{n}
意義:這里的n是一個(gè)正整數(shù)。匹配前面的n個(gè)字符。
例如:/a{2}/不匹配"candy,"中的'a',但匹配"caandy," 中的所有'a'和"caaandy."中前面的兩個(gè)
'a'。
字符{n,}
意義:這里的n是一個(gè)正整數(shù)。匹配至少n個(gè)前面的字符。
例如:/a{2,}不匹配"candy"中的'a',但匹配"caandy"中的所有'a'和"caaaaaaandy."中的所有'a'
字符{n,m}
意義:這里的n和m都是正整數(shù)。匹配至少n個(gè)最多m個(gè)前面的字符。
例如:/a{1,3}/不匹配"cndy"中的任何字符,但匹配 "candy,"中的'a',"caandy," 中的前面兩個(gè)
'a'和"caaaaaaandy"中前面的三個(gè)'a',注意:即使"caaaaaaandy" 中有很多個(gè)'a',但只匹配前面的三
個(gè)'a'即"aaa"。
字符[xyz]
意義:一字符列表,匹配列出中的任一字符。你可以通過連字符-指出一個(gè)字符范圍。
例如:[abcd]跟[a-c]一樣。它們匹配"brisket"中的'b'和"ache"中的'c'。
字符[^xyz]
意義:一字符補(bǔ)集,也就是說,它匹配除了列出的字符外的所有東西。 你可以使用連字符-指出一
字符范圍。
例如:[^abc]和[^a-c]等價(jià),它們最早匹配"brisket"中的'r'和"chop."中的'h'。
字符[\b]
意義:匹配一個(gè)空格(不要與\b混淆)
字符\b
意義:匹配一個(gè)單詞的分界線,比如一個(gè)空格(不要與[\b]混淆)
例如:/\bn\w/匹配"noonday"中的'no',/\wy\b/匹配"possibly yesterday."中的'ly'。
字符\B
意義:匹配一個(gè)單詞的非分界線
例如:/\w\Bn/匹配"noonday"中的'on',/y\B\w/匹配"possibly yesterday."中的'ye'。
字符\cX
意義:這里的X是一個(gè)控制字符。匹配一個(gè)字符串的控制字符。
例如:/\cM/匹配一個(gè)字符串中的control-M。
字符\d
意義:匹配一個(gè)數(shù)字,等價(jià)于[0-9]。
例如:/\d/或/[0-9]/匹配"B2 is the suite number."中的'2'。
字符\D
意義:匹配任何的非數(shù)字,等價(jià)于[^0-9]。
例如:/\D/或/[^0-9]/匹配"B2 is the suite number."中的'B'。
字符\f
意義:匹配一個(gè)表單符
字符\n
意義:匹配一個(gè)換行符
字符\r
意義:匹配一個(gè)回車符
字符\s
意義:匹配一個(gè)單個(gè)white空格符,包括空格,tab,form feed,換行符,等價(jià)于[ \f\n\r\t\v]。
例如:/\s\w*/匹配"foo bar."中的' bar'。
字符\S
意義:匹配除white空格符以外的一個(gè)單個(gè)的字符,等價(jià)于[^ \f\n\r\t\v]。
例如:/\S/\w*匹配"foo bar."中的'foo'。
字符\t
意義:匹配一個(gè)制表符
字符\v
意義:匹配一個(gè)頂頭制表符
字符\w
意義:匹配所有的數(shù)字和字母以及下劃線,等價(jià)于[A-Za-z0-9_]。
例如:/\w/匹配"apple,"中的'a',"$5.28,"中的'5'和"3D."中的'3'。
字符\W
意義:匹配除數(shù)字、字母外及下劃線外的其它字符,等價(jià)于[^A-Za-z0-9_]。
例如:/\W/或者/[^$A-Za-z0-9_]/匹配"50%."中的'%'。
字符\n
意義:這里的n是一個(gè)正整數(shù)。匹配一個(gè)正則表達(dá)式的最后一個(gè)子串的n的值(計(jì)數(shù)左圓括號)。
例如:/apple(,)\sorange\1/匹配"apple, orange, cherry, peach."中的'apple, orange',下面
有一個(gè)更加完整的例子。
注意:如果左圓括號中的數(shù)字比\n指定的數(shù)字還小,則\n取下一行的八進(jìn)制escape作為描述。
字符\ooctal和\xhex
意義:這里的\ooctal是一個(gè)八進(jìn)制的escape值,而\xhex是一個(gè)十六進(jìn)制的escape值,允許在一個(gè)
正則表達(dá)式中嵌入ASCII碼。
當(dāng)表達(dá)式被檢查的時(shí)候,文字符號提供了編輯正則表達(dá)式的方法。利用文字符號可以使到正則表達(dá)
式保持為常數(shù)。例如,如果你在一個(gè)循環(huán)中使用文字符號來構(gòu)造一個(gè)正則表達(dá)式,正則表達(dá)式不需進(jìn)行
反復(fù)編譯。
正則表達(dá)式對象構(gòu)造器,例如,new RegExp("ab+c"),提供正則表達(dá)式的運(yùn)行時(shí)編譯。當(dāng)你知道正
則表達(dá)式的模式會變化的時(shí)候,應(yīng)該使用構(gòu)造函數(shù),或者你不知道正則表達(dá)式的模式,而它們是從另外
的源獲得的時(shí)候,比如由用戶輸入時(shí)。一旦你定義好了正則表達(dá)式,該正則表達(dá)式可在任何地方使用,
并且可以改變,你可以使用編譯方法來編譯一個(gè)新的正則表達(dá)式以便重新使用。
一個(gè)分離預(yù)先定義的RegExp對象可以在每個(gè)窗口中使用;也就是說,每個(gè)分離的JavaScript線程運(yùn)
行以獲得自己的RegExp對象。因?yàn)槊總€(gè)腳本在一個(gè)線程中是不可中斷的,這就確保了不同的腳本不會覆
蓋RegExp對象的值。
預(yù)定義的RegExp對象包含的靜態(tài)屬性:input, multiline, lastMatch,lastParen, leftContext,
rightContext, 以及從$1到$9。input和multiline屬性能被預(yù)設(shè)。其它靜態(tài)屬性的值是在執(zhí)行個(gè)別正則
表達(dá)式對象的exec和test方法后,且在執(zhí)行字符串的match和replace方法后設(shè)置的。
屬性
注意RegExp對象的幾個(gè)屬性既有長名字又有短名字(象Perl)。這些名字都是指向相同的值。Perl是
一種編程語言,而JavaScript模仿了它的正則表達(dá)式。
屬性$1, ..., $9
取得匹配的子串,如果有的話
屬性$_
參考input
屬性$*
參考multiline
屬性$&
參考lastMatch
屬性$+
參考lastParen
屬性$`
參考leftContext
屬性$'
參考rightContext
屬性constructor
指定用來建立對象原型函
屬性global
決定是否測試正則表達(dá)式是否不能匹配所有的字符串,或者只是與最先的沖突。
屬性ignoreCase
決定試圖匹配字符串的時(shí)候是否忽略大小寫
屬性input
當(dāng)正則表達(dá)式被匹配的時(shí)候,為相反的字符串。
屬性lastIndex
決定下一次匹配從那里開始
屬性lastMatch
最后一個(gè)匹配的字符
屬性lastParen
子串匹配的時(shí)候,最后一個(gè)parenthesized,如果有的話。
屬性leftContext
最近一次匹配前的子串。
屬性multiline
是否在串的多行中搜索。
屬性prototype
允許附加屬性到所有的對象
屬性rightContext
最近一次匹配后的的子串。
屬性source
模式文本
方法
compile方法
編譯一個(gè)正則表達(dá)式對象
exec方法
運(yùn)行正則表達(dá)式匹配
test方法
測試正則達(dá)式匹配
toSource方法
返回一個(gè)對象的文字描述指定的對象;你可以使用這個(gè)值來建立一個(gè)新的對象。不考慮Object.toS
ource方法。
toString方法
返回一個(gè)字符串描述指定的對象,不考慮Object.toString對象。
valueOf方法
返回指定對角的原始值。不考慮Object.valueOf方法。
另外,這個(gè)對象繼承了對象的watch和unwatch方法
例子:
例1、下述示例腳本使用replace方法來轉(zhuǎn)換串中的單詞。在替換的文本中,腳本使用全局 RegExp
對象的$1和$2屬性的值。注意,在作為第二個(gè)參數(shù)傳遞給replace方法的時(shí)候,RegExp對象的$屬性的名
稱。
<SCRIPT LANGUAGE="JavaScript1.2">
re = /(\w+)\s(\w+)/;
str = "John Smith";
newstr=str.replace(re,"$2, $1");
document.write(newstr)
</SCRIPT>
顯示結(jié)果:"Smith, John".
例2、下述示例腳本中,RegExp.input由Change事件處理句柄設(shè)置。在getInfo函數(shù)中,exec 方法
使用RegExp.input的值作為它的參數(shù),注意RegExp預(yù)置了$屬性。
<SCRIPT LANGUAGE="JavaScript1.2">
function getInfo(abc)
{
re = /(\w+)\s(\d+)/;
re.exec(abc.value);
window.alert(RegExp.$1 + ", your age is " + RegExp.$2);
}
</SCRIPT>
請輸入你的姓和年齡,輸入完后按回車鍵。
<FORM><INPUT TYPE="TEXT" NAME="NameAge" onChange="getInfo(this);"></FORM>
</HTML>
$1, ..., $9屬性
用圓括號括著的匹配子串,如果有的話。
是RegExp的屬性
靜態(tài),只讀
在JavaScript 1.2, NES 3.0以上版本提供
描述:因?yàn)閕nput是靜態(tài)屬性,不是個(gè)別正則表達(dá)式對象的屬性。你可以使用RegExp.input 訪問該
屬性。
能加上圓括號的子串的數(shù)量不受限制,但正則表達(dá)式對象只能保留最后9 條。如果你要訪問所有的
圓括號內(nèi)的匹配字串,你可以使用返回的數(shù)組。
這些屬性能用在RegExp.replace方法替換后的字符串(輸出結(jié)果)。當(dāng)使用這種方式的時(shí)候,不用預(yù)
先考慮RegExp對象。下面給出例子。當(dāng)正則表達(dá)式中沒有包含圓括號的時(shí)候,該腳本解釋成$n的字面意
義。(這里的n是一個(gè)正整數(shù))。
例如:
下例腳本使用replace 方法來交換串中單詞的位置。在替換后的文本字串中,腳本使用正則表達(dá)式
RegExp對象的$1和$2屬性的值。注意:當(dāng)它們向replace方法傳遞參數(shù)的時(shí)候,這里沒有考慮 $ 屬性的
RegExp對象的名稱。
<SCRIPT LANGUAGE="JavaScript1.2">
re = /(\w+)\s(\w+)/;
str = "John Smith";
newstr=str.replace(re,"$2, $1");
document.write(newstr)
</SCRIPT>
顯示的輸出結(jié)果為:Smith, John。
正則表達(dá)式regular expression詳述(二)
http://www.kymita.com/888.asp 2002-12-15 藍(lán)箭工作室
正則表達(dá)式詳述(二)
以下這些不是正則表達(dá)式的新增對象請參閱對應(yīng)的JavaScript對象的屬性 $_屬性 參考input $*屬性
參考multiline $&屬性 參考lastMatch $+屬性 參考lastParen $`屬性
參考leftContext $'屬性 參考rightContext compile方法 在腳本運(yùn)行期間編譯正則表達(dá)式對象
屬于RegExp的方法 在JavaScript 1.2, NES 3.0以上版本提供 語法:
regexp.compile(pattern[, flags]) 以數(shù): regexp 正則表達(dá)式的名稱,可以是變量名或文字串。
pattern 正則表達(dá)式的定義文本。 flags 如果指定的話,可以是下面其中的一個(gè): "g": 匹配所有可能的字串
"i": 忽略大小寫 "gi": 匹配所有可能的字串及忽略大小寫 描述:
使用compile方法來編譯一個(gè)正則表達(dá)式 created with the RegExp constructor function。這樣
就強(qiáng)制正則表達(dá)式只編譯一次,而不是每次遇到正則表達(dá)式的時(shí)候都編譯一次。當(dāng)你確認(rèn)正則表達(dá)式能
保持不變的時(shí)候可使用compile 方法來編譯它(在獲得它的匹配模式后),這樣就可以在腳本中重復(fù)多次使用它。
你亦可以使用compile 方法來改變在運(yùn)行期間改變正則表達(dá)式。例如,假如正則表達(dá)式發(fā)生變化,
你可以使用compile方法來重新編譯該對象來提高使用效率。
使用該方法將改變正則表達(dá)式的source, global和ignoreCasesource屬性的值。 constructor
指出建立對象原型的function。注意這個(gè)屬性的值由函數(shù)本身提供,而不是一個(gè)字串包含RegExp的name.Property提供。
在JavaScript 1.1, NES 2.0以上版本提供 ECMA版本ECMA-262 描述:參考Object.constructor.
exec方法 在指定的字符串運(yùn)行匹配搜索。返回一個(gè)結(jié)果數(shù)組。 是RegExp的方法
在JavaScript 1.2, NES 3.0以上版本提供 語法: regexp.exec([str])regexp([str])
參數(shù): regexp,正則表達(dá)式的名稱,可以是一個(gè)變量名或文字定義串。
str,要匹配正則表達(dá)式的字符串,如果省略,將使用RegExp.input的值。
描述:就如在語法描述中的一樣,正則表達(dá)工的exec方法能夠被直接調(diào)用(使用regexp.exec(str))或者間接調(diào)用(使用regexp(str))。
假如你只是運(yùn)行以找出是否匹配,可以使用String搜索方法。
假如匹配成功,exec方法返回一個(gè)數(shù)組并且更新正則表達(dá)式對象屬性的值和預(yù)先定義的正則表達(dá)式對象、RegExp。如果匹配失敗,exec方法返回null。
請看下例: <SCRIPT LANGUAGE="JavaScript1.2"> //匹配一個(gè)b接著一個(gè)或多個(gè)d,再接著一個(gè)b
//忽略大小寫 myRe=/d(b+)(d)/ig; myArray = myRe.exec("cdbBdbsbz");
</SCRIPT> 下面是該腳本的返回值:對象 屬性/Index 描述 例子
myArray
myArray的內(nèi)容 ["dbBd", "bB", "d"]
index
基于0的匹配index 1
input
原始字符串 cdbBdbsbz
[0]
最后匹配的字符 dbBd
[1], ...[n]
用圓括號括住的匹配字符串,如果有的話。不限制括號的個(gè)數(shù)。 [1] = bB
[2] = d
myRe
lastIndex
開始下次匹配操作的index值 5
ignoreCase
指出"i"是否使用以忽略大小寫 true
global
指出是否使用"g"標(biāo)記來進(jìn)行匹配所有可能的字串 true
source
定義模式的文本字符串 d(b+)(d)
RegExp
lastMatch$&
最后匹配的字符 dbBd
leftContext$\Q
最新匹配前面的子串 c
rightContext$'
最新匹配后面的子串 bsbz
$1, ...$9
圓括號內(nèi)的匹配子串,如果有的話。圓括號的個(gè)數(shù)不受限制,但RegExp只能保留最后9個(gè) $1 = bB
$2 = d
lastParen $+
最后一個(gè)加上圓括號的匹配子串,如果有的話 d
假如你的正則表達(dá)式使用了"g"標(biāo)記,你可以多次使用exec 方法來連續(xù)匹配相同的串。當(dāng)你這樣做
的時(shí)候,新的匹配將從由正則表達(dá)式的lastIndex 屬性值確定的子串中開始。例如,假定你使用下面的腳本:
<SCRIPT LANGUAGE="JavaScript1.2"> myRe=/ab*/g;str = "abbcdefabh"
myArray = myRe.exec(str);
document.writeln("Found "+myArray[0]+". Next match starts at "+myRe.lastIndex)
mySecondArray = myRe.exec(str);
document.writeln("Found "+mySecondArray[0]+". Next match starts at "+myRe.lastIndex)
</SCRIPT> 這個(gè)腳本顯示如下結(jié)果: Found abb. Next match starts at 3
Found ab. Next match starts at 9 例子:
在下面的例子中,用戶輸入一個(gè)名字,腳本根據(jù)輸入執(zhí)行匹配操作。接著檢查數(shù)組看是否和其它用戶的名字匹配。
本腳本假定已注冊的用戶的姓已經(jīng)存進(jìn)了數(shù)組A中,或許從一個(gè)數(shù)據(jù)庫中取得。 <HTML>
<SCRIPT LANGUAGE="JavaScript1.2"> A = ["zhao","qian","sun","li","liang"]
function lookup() { firstName = /\w+/i(); if (!firstName)
window.alert (RegExp.input + "非法輸入"); else { count=0;
for (i=0;i 輸入你的姓然后按回車鍵。
<FORM><INPUT TYPE:"TEXT" NAME="FirstName" onChange="lookup(this);"></FORM>
</HTML> global屬性 正則表達(dá)式中是否使用了"g"標(biāo)記。 RegExp屬性,只讀
在JavaScript 1.2, NES 3.0以上版本提供 描述: global是一個(gè)個(gè)別正則表達(dá)式對象的屬性
如果使用了"g"標(biāo)記,global的值為true;否則為 false。"g"標(biāo)記指定正則表達(dá)式測試所有可能的匹配。
你不能直接改變該屬性的值,但可以調(diào)用compile方法來改變它。 ignoreCase 檢查正則表達(dá)式是否使用了"i"標(biāo)記
RegExp屬性,只讀 在JavaScript 1.2, NES 3.0以上版本提供 描述:
ignoreCase是個(gè)別正則表達(dá)式對象的一個(gè)屬性。
如果使用了"i"標(biāo)記,則返回true,否則返回false。"i"標(biāo)記指示在進(jìn)行匹配的時(shí)候忽略大小寫。
你不能直接改變該屬性的值,但可以通過調(diào)用compile方法來改變它 input 指出正則表達(dá)式要測試那個(gè)字串。$_是這個(gè)屬性的另一個(gè)名字。
RegExp的屬性,靜態(tài) 在JavaScript 1.2, NES 3.0以上版本提供
描述:因?yàn)閕nput是靜態(tài)的,不是某個(gè)個(gè)別的正則表達(dá)式對象的屬性。你也可以使用 RegExp.input來表示。
如果沒有給正則表達(dá)式的exec或test方法提供字符串,并且RegExp.input中有值,則使用它的值來調(diào)用該方法。
腳本或?yàn)g覽器能夠預(yù)置input屬性。如果被預(yù)置了值且調(diào)用exec或 test方法的時(shí)候沒有提供字符串
則調(diào)用exec或test的時(shí)候使用input的值。input可以被瀏覽器以下面的方式設(shè)置:
當(dāng)text表單域處理句柄被調(diào)用的時(shí)候,input被設(shè)置為該text輸入的字串。
當(dāng)textarea表單域處理句柄被調(diào)用的時(shí)候,input被設(shè)置為textarea域內(nèi)輸入的字串。注意multili
ne亦被設(shè)置成true從而能匹配多行文本。 當(dāng)select表單域處理句柄被調(diào)用的時(shí)候,input被設(shè)置成selected text的值。
當(dāng)鏈接對象的處理句柄被調(diào)用的時(shí)候,input被設(shè)置成<A HREF=...>和</A>之間的字符串。
事件理現(xiàn)句柄處理完畢后,input屬性的值被清除。 lastIndex 可讀/可寫的一個(gè)整數(shù)屬性,指出下一次匹配從哪里開始。
RegExp的屬性 在JavaScript 1.2, NES 3.0以上版本提供
描述:lastIndex 是個(gè)別的正則表達(dá)式對象的屬性。 這個(gè)屬性只有當(dāng)正則表達(dá)式的"g"標(biāo)記被使用以進(jìn)行全串匹配的時(shí)候才被設(shè)置。實(shí)行以下規(guī)則:
如果lastIndex大小字符串的長度,regexp.test和regexp.exec失敗,且lastIndex被設(shè)為0。
如果lastIndex等于字串的長度且正則表達(dá)式匹配空字符串,則正則表達(dá)式從lastIndex的位置開始匹配。
如果lastIndex等于字符串的長度且正則表達(dá)式不匹配空字符串,則正則表達(dá)式不匹配input,且lastIndex被置為0。
否則,lastIndex被設(shè)置成最近一次匹配的下一點(diǎn)。 例如,按下面的順序執(zhí)行腳本: re = /(hi)?/g 匹配空字符串
re("hi") 返回["hi", "hi"],lastIndex置為2
re("hi") 返回[""],一個(gè)空數(shù)組,它的下標(biāo)為0的元素就是匹配字符串。在這種情況下,返回空
串是因?yàn)閘astIndex等于2(且仍然是2),并且"hi"的長度也是2。 lastMatch 最后一次匹配字符串,$&是同樣的意思。
RegExp的屬性,靜態(tài),只讀 在JavaScript 1.2, NES 3.0以上版本提供
描述:因?yàn)閘astMatch是靜態(tài)的,所以它不是個(gè)別指定正則表達(dá)式的屬性。你也可以使用RegExp.lastMatch。 lastParen
最后一次加上括號的匹配字符串,如果有的話。$+是同樣的意思。 RegExp屬性,靜態(tài),只讀
在JavaScript 1.2, NES 3.0以上版本提供
描述:因?yàn)閘astParen是靜態(tài)的,它不是某個(gè)個(gè)別正則式的屬性,你可以使用RegExp.lastParen 表達(dá)同樣的意思。
leftContext 最近一次匹配前面的子串,$`具有相同的意思。 RegExp的屬性,靜態(tài),只讀
在JavaScript 1.2, NES 3.0以上版本提供
描述:因?yàn)閘eftContext是靜態(tài)的,不是某一個(gè)正則表達(dá)式的屬性,所以可以使用RegExp.leftContext來表達(dá)想同的意思。
multiline 反映是否匹配多行文本,$*是相同的意思。 RegExp的屬性,靜態(tài)
在JavaScript 1.2, NES 3.0以上版本提供
描述:因?yàn)閙ultiline是靜態(tài)的,而不是某個(gè)個(gè)別正則表達(dá)式的屬性,所以能夠用RegExp.multiline表達(dá)相同的意思。
如果允許匹配多行文本,則multiline為true,如果搜索必須在換行時(shí)停止,則為false。
腳本或?yàn)g覽器能夠設(shè)置multiline屬性。當(dāng)一個(gè)textarea的事件處理句柄被調(diào)用的時(shí)候,multiline
被置為true。在事件處理句柄處理完畢后,multiline屬性值被清除。也就是說,如果你設(shè)置了multili
ne為true,則執(zhí)行任何的事件處理句柄后,multiline被置為false。 prototype
描繪類的原型。你可以根據(jù)要求使用prototype來增加類的屬性或方法。為了獲得prototypes 的資
料,請參閱RegExp的Function.prototype.Property屬性。 從JavaScript 1.1, NES 2.0版本開始提供
ECMA版本ECMA-262 rightContext 最后一次匹配的右邊的字符串,$'是同樣的效果。
RegExp的屬性,靜態(tài),只讀 從 JavaScript 1.2, NES 3.0以上版本開始提供
描述:因?yàn)閞ightContext是靜態(tài)的,不是某個(gè)個(gè)別正則表達(dá)工的屬性,可以使用RegExp.rightContext來達(dá)到相同的效果。
source 一個(gè)只讀屬性,包含正則表達(dá)式定義的模式,不包僑forward slashes和"g"或"i"標(biāo)記。 RegExp的屬性,只讀
從JavaScript 1.2, NES 3.0以上版本開始提供
描述:source是個(gè)別正則表達(dá)式對象的屬性,你不能直接改變它的值,但可以通過調(diào)用compile 方法來改變它。 test
執(zhí)行指定字符串的正則表達(dá)式匹配搜索,返回true或false。 RegExp的方法
從JavaScript 1.2, NES 3.0以上版本開始提供 語法:regexp.test([str])
參數(shù):regexp,正則表達(dá)式的名稱,可以是變量名或正則表達(dá)式定義文字串
str,要匹配的字符串,如果省略,將使用RegExp.input的值為作參數(shù)
描述:當(dāng)你需要知道一個(gè)字符串能否匹配某個(gè)正則表達(dá)工,可以使用test方法(與String.search方
法類似); 為了獲得更多的信息(但速度將變慢),可以使用exec方法(與String.match方法類似)。 例子:下面的例子顯示test是否成功的提示:
function testinput(re, str){
if (re.test(str)) midstring = " contains ";
else midstring = " does not contain ";
document.write (str + midstring + re.source); } toSource
返回一個(gè)字符串象征對象的源碼 RegExp的方法 從JavaScript 1.3以上版本開始提供 語法:toSource()
參數(shù):沒有 描述:toSource方法返回下述的值: 對于內(nèi)置的RegExp對象,toSource返回下面的字符象征源碼不可用:
function Boolean(){ [native code] }
在RegExp場合中, toSource返回象征源碼的字符串,通常這個(gè)方法是由JavaScript內(nèi)部自動調(diào)用而不是不代碼中顯式調(diào)用。
更多請看Object.toSource toString 返回描繪指定對象的字符串。 RegExp的方法
從JavaScript 1.1, NES 2.0開始提供 ECMA版本ECMA-262 語法:toString() 參數(shù):無
描述:RegExp對象不考慮Object對象的toString方法;它不繼承Object.toString,對于RegExp 對
象,toString方法返回一個(gè)代表該對象的字符串。 例如:下面的例子顯示象征RegExp對象的字符串
myExp = new RegExp("a+b+c"); alert(myExp.toString())
displays "/a+b+c/" 更多請看:Object.toString valueOf 返回一個(gè)RegExp對象的原始值
RegExp的方法 從JavaScript 1.1版本開始提供 ECMA版本:ECMA-262 語法:valueOf()
參數(shù):無 描述:RegExp的valueOf方法以字符串形式返回RegExp對象的原始值,這個(gè)值與RegExp.toString相等。
該方法通常由JavaScript內(nèi)部自動調(diào)用而不是顯式調(diào)用 例子: myExp = new RegExp("a+b+c");
alert(myExp.valueOf()) displays "/a+b+c/"
正則表達(dá)式在javascript中的幾個(gè)實(shí)例1(轉(zhuǎn))
! 去除字符串兩端空格的處理
如果采用傳統(tǒng)的方式,就要可能就要采用下面的方式了
//清除左邊空格
function js_ltrim(deststr)
{
if(deststr==null)return "";
var pos=0;
var retStr=new String(deststr);
if (retStr.lenght==0) return retStr;
while (retStr.substring(pos,pos+1)==" ") pos++;
retStr=retStr.substring(pos);
return(retStr);
}
//清除右邊空格
function js_rtrim(deststr)
{
if(deststr==null)return "";
var retStr=new String(deststr);
var pos=retStr.length;
if (pos==0) return retStr;
while (pos && retStr.substring(pos-1,pos)==" " ) pos--;
retStr=retStr.substring(0,pos);
return(retStr);
}
//清除左邊和右邊空格
function js_trim(deststr)
{
if(deststr==null)return "";
var retStr=new String(deststr);
var pos=retStr.length;
if (pos==0) return retStr;
retStr=js_ltrim(retStr);
retStr=js_rtrim(retStr);
return retStr;
}
采用正則表達(dá)式,來去除兩邊的空格,只需以下代碼
String.prototype.trim = function()
{
return this.replace(/(^\s*)|(\s*$)/g, "");
}
一句就搞定了,
可見正則表達(dá)式為我們節(jié)省了相當(dāng)?shù)木帉懘a量
! 移動手機(jī)號的校驗(yàn)
如果采用傳統(tǒng)的校驗(yàn)方式至少就要完成下面三步的校驗(yàn),
(1). 是否是數(shù)字
(2).是否是11位
(3).數(shù)字的第三位是否是5,6,7,8,9
如果采用正則表達(dá)式校驗(yàn),只需以下代碼
function checkMobile1(form)
{
if (form.mobile.value > "")
{
var reg=/13[5,6,7,8,9]\d{8}/;
if ( form.mobile.value.match(reg)== null)
{
alert("請輸入正確的移動手機(jī)號碼!");
form.mobile.focus(); return false;
}
}
return true;
}
從上面的代碼可以看出校驗(yàn)移動手機(jī)號只需定義一個(gè)var reg=/13[5,6,7,8,9]\d{8}/;模式匹配串就可以完成合法性校驗(yàn)了
! URL的校驗(yàn),
條件:必須以http:// 或 https:// 開頭, 端口號必須為在1-65535 之間, 以下代碼完成了合法性校驗(yàn)
//obj:數(shù)據(jù)對象
//dispStr :失敗提示內(nèi)容顯示字符串
function checkUrlValid( obj, dispStr)
{
if(obj == null)
{
alert("傳入對象為空");
return false;
}
var str = obj.value;
var urlpatern0 = /^https?:\/\/.+$/i;
if(!urlpatern0.test(str))
{
alert(dispStr+"不合法:必須以'http:\/\/'或'https:\/\/'開頭!");
obj.focus();
return false;
}
var urlpatern2= /^https?:\/\/(([a-zA-Z0-9_-])+(\.)?)*(:\d+)?.+$/i;
if(!urlpatern2.test(str))
{
alert(dispStr+"端口號必須為數(shù)字且應(yīng)在1-65535之間!");
obj.focus();
return false;
}
var urlpatern1 =/^https?:\/\/(([a-zA-Z0-9_-])+(\.)?)*(:\d+)?(\/((\.)?(\?)?=?&?[a-zA-Z0-9_-](\?)?)*)*$/i;
if(!urlpatern1.test(str))
{
alert(dispStr+"不合法,請檢查!");
obj.focus();
return false;
}
var s = "0";
var t =0;
var re = new RegExp(":\\d+","ig");
while((arr = re.exec(str))!=null)
{
s = str.substring(RegExp.index+1,RegExp.lastIndex);
if(s.substring(0,1)=="0")
{
alert(dispStr+"端口號不能以0開頭!");
obj.focus();
return false;
}
t = parseInt(s);
if(t<1 || t >65535)
{
alert(dispStr+"端口號必須為數(shù)字且應(yīng)在1-65535之間!");
obj.focus();
return false;
}
}
return true;
}
對url的校驗(yàn),看上去有很多的代碼,這是因?yàn)橐o予出錯(cuò)提示, 否則只需var urlpatern1 =/^https?:\/\/(([a-zA-Z0-9_-])+(\.)?)*(:\d+)?(\/((\.)?(\?)?=?&?[a-zA-Z0-9_-](\?)?)*)*$/i; 一句就可以校驗(yàn)出url合法性了
|
|||||||||||||
用正則表達(dá)式和javascript對表單進(jìn)行全面驗(yàn)證 |
代碼:<!-- --> var empty=false; var validatorType=field[i].validatorType; |
時(shí)代復(fù)分
是匹配2-4個(gè)數(shù)字吧