




免費預(yù)覽已結(jié)束,剩余5頁可下載查看
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
邢老師教案第八章 Struts 2 的輸入校驗輸入校驗分為客戶校驗和服務(wù)器校驗??蛻粜r炛饕峭ㄟ^JAVASCRIPT 代碼完成。服務(wù)器端校驗是通過應(yīng)用編程實現(xiàn)。輸入校驗是表現(xiàn)層數(shù)據(jù)處理的一種,應(yīng)該由MVC 框架提供。Struts2 提供了內(nèi)置校驗器,應(yīng)用無需書寫任何校驗代碼,即可完成絕大部分輸入校驗。如果校驗很負(fù)責(zé),也可以通過 validate 方法來完成自定義校驗。81 正則表達(dá)式(Regular Expression):就是用某種模式去匹配一類字符串的公式,它主要是用來描述字符串匹配的工具。正則表達(dá)式描述了一種字符串匹配的模式,可以作為模板,將某個字符模式與所搜索的字符串進(jìn)行匹配。8.1.1 元字符:在正則表達(dá)式中,元字符是一類非常特殊的字符,它能夠匹配一個位置或字符集合中的字符。元字符可以分為兩類:匹配位置的元字符和匹配字符的元字符。 1)匹配位置的元字符: 包括3個字符( 、$、b )。其中 ( 脫字符 ) 和 $ ( 美元符號 )匹配一個位置,它分別匹配行的開始和結(jié)尾。 例1 string 表示匹配以 string 開頭 例 2 string$ 表示匹配以 string 結(jié)尾 例 3 string$ 表示匹配以 string 開始并結(jié)尾的,也就是匹配 string例 4 $ 表示匹配一個空行例 5 表示匹配任意行 元字符 b 和 $ 具有相似性,它也是匹配一個位置。b 可以配置單詞的開始和結(jié)尾,即單詞的分界處。b 不會匹配空格、標(biāo)點符號和換行。例1 bstr 匹配以 str 開頭的 。 像 1 str 和 str 、 ,str 都是可以匹配的。例2 ingb 匹配以ing 結(jié)尾。例3 bstringb 匹配 string 字符串 2)匹配字符的元字符:包括7個字符( . 點號 、w 、 W 、s 、S 、d 、D ) 。 其中 點號匹配除換行符號之外的任意字符 w 匹配單詞字符(包括字母 數(shù)字 、下劃線、非漢字) W 匹配任意的非單詞字符,如? ! 和漢字 s 匹配任意的空白字符 ,如空格 、制表符號、換行 S 匹配任意的非空白字符 d 匹配任意數(shù)字 D 匹配任意的非數(shù)字字符。例 1 .$ 匹配除了換行 以外的任意字符 如 1 a 例2 w$ 匹配一個非空行,只能包含字母 數(shù)字 下劃線 任意一個字符例3 bawwwwwwwb 匹配以字母 a 開頭的長度是 8 的任意單詞例4 bawwwdddDb 匹配 a+3個字符+3個數(shù)字+1個非數(shù)字3) 元字符總結(jié)實例:元字符 。點能夠匹配除換行以外的任意字符。例1 2007.6.22 匹配 除換行以外 的任何字符分割字符串 2007 6 和22 . 能匹配的有: 2007.6.222007-6-222007/6/22W(大寫) 能夠匹配除了單詞字符以外的任意字符 如非(字母 數(shù)字 、下劃線)和漢字例如 WW 可以匹配 ?元字符 s 能夠匹配一個空白符號。 例如 wsw 可以匹配 a b 元字符 S 能夠匹配任意的非空白字符。 例如 SsS 匹配一個非空白字符+空白字符+一個非空白字符元字符 d 能夠匹配一個0 9 的數(shù)字 例如 ddd 匹配123元字符 D 能夠匹配一個除了0 9 的字母 例如 bdD 匹配 1a8.1.2 字符類:元字符只能匹配一個位置或字符集合中的一個字符。如果要匹配字符集合的話,需要字符類。字符類可以在 中定義。例如 1) 0123456789 匹配 0 到 9 2) 匹配 到 不匹配 3 ) Jjack 匹配 Jack 或 jack0123456789 書寫很不方便,可以寫成 0-9 a-z 匹配 a 到 z A-Z 匹配 A 到 Z如果要在字符類中包括連接符” “ ,則必須將它作為第一個字符,如 -a 匹配”-“ 或 “a” 。在字符類中,如果字符 是第一個字符,則表示否定該字符類。 如 ac 匹配不是 a 或 c 的。ab 表示匹配 a 后面不是b 的兩個字符。0-9a-zA-Z 表示匹配 任何數(shù)字字母.8.1.3 字符轉(zhuǎn)義:由于一些元字符有特殊含義,所以要匹配這些字符需要用” 來進(jìn)行轉(zhuǎn)義。. 匹配 “.” * 匹配* 匹配 例如 8.14 反義: 如果需要匹配不在字符類指定范圍內(nèi)的字符時,可以使用反義規(guī)則。例如匹配字符a之后不是b的字符串 ab 常用的反義表達(dá)式W 匹配任意的非單詞字符(包括字母 數(shù)字下劃線和漢字)也就是特殊字符 如? 等S 匹配任意的非空白字符D 匹配任意的非數(shù)字字符B 匹配不是單詞開頭和結(jié)束的任何位置 a 匹配除了a以外的任何字符aeiou 匹配除了字符集中字符之外的字符8.1.5 限定符:正則表達(dá)式的元字符一次之能匹配一個位置或一個字符,如果要匹配0個、一個或多個字符時,則需要使用限定符。限定符用于指定允許特點字符或字符集自身重復(fù)出現(xiàn)的次數(shù)。常用限定符如下: n 重復(fù)n次 n, 重復(fù)至少n次n,m 重復(fù)至少n次,最多m次* 重復(fù)至少 0次,等同0, ,表示可以不出現(xiàn)+ 重復(fù)至少1次? 重復(fù)0次或1次*? 盡可能少的使用重復(fù)的第一個匹配+? 盡可能少的使用重復(fù)但至少使用一次? 使用0次重復(fù)或一次重復(fù)n? 等同樣nn,? 盡可能少的使用重復(fù)但至少使用n次n,m? 介于n次和m次之間,盡可能少的使用重復(fù)。例如 1)fou?r 可以匹配 four 或 for 2 ) bnamed+b 表示以 name開頭 ,以數(shù)字結(jié)尾 3) baw*b 表示以a 開頭,其他字符結(jié)尾的字符串 4)d3 表示匹配3位整數(shù)。 5)d3, 表示匹配3位以上的整數(shù)。 6)13d9 表示匹配以13開頭+9位數(shù)字,例如驗證手機(jī)號碼 7)0d2-d8 表示匹配區(qū)號+“-”+8位數(shù)字。 8)ba1,4b1,3b 能匹配 ab aab aaab abb aabb aabbb aaabbb aaaabbb如果在限定符號 * + ? n n,和 n,m之后在添加一個字符 ” ?”, 表示盡可能少的重復(fù)字符 “?” 之前的限定符號的重復(fù)次數(shù),這種匹配稱為懶惰匹配,之前的匹配稱為貪婪匹配。 *? 表示盡可能少地使用重復(fù)的第一匹配+? 表示盡可能少的使用重復(fù)但至少使用一次? 表示使用零次重復(fù)或一次重復(fù)n? 表示等同于nn,? 表示盡可能少地使用重復(fù)但至少使用n次n,m? 介于n次和m次之間,盡可能少地使用重復(fù)一下正則表達(dá)式匹配以字符 a看頭,以字符b結(jié)尾,的最長字符串。這是一種貪婪匹配。 a.* b 求最短匹配 a.?b 這是懶惰匹配例如字符 “aabab” a.*b 找到得是 aabab ,a.?b找的是 aab1) 匹配以字母 a 開頭的,以字母 b結(jié)束的,長度至少是3的字符串。aabab . a.+b 會匹配 aabab 。 a.+?b會匹配aab 2 ) 匹配字母以 a 開頭的,以字母b結(jié)束的,長度為2或3的字符串, 對于字符串” avbab “ 貪婪匹配是 a.?b 得到ab , 懶惰匹配是 a.?b 得到 ab3) 匹配以字母a開頭,以字母b結(jié)束的,長度至少是3的字符串。 字符串為 “avvbab”此時這是一種貪婪匹配: a.1,b 得到 avvbab懶惰匹配:a.1,?b 得到avvb 8.1.6 替換: 正則表達(dá)式0d2-d8和0d3-d7分別表示匹配0123-5555555。如果要同時匹配這兩個格式的電話呢可以使用替換來解決。替換用“ | ”. 注意兩邊不要加空格。例如 0d2-d8|0d3-d7 可以匹配也可以匹配如 0d2-d3|0d2-?d3 可以匹配023111 和 023-111例如 Jjack 可以匹配”Jack” ,”jack” 。那么Jack|jack 也可以匹配。(J|j)ack也可以匹配。需要注意的是 ,匹配總是從左邊的開始匹配。如果左面匹配不了才匹配右邊的。8.1.7 分組:分組又稱子表達(dá)式,即把一個正則表達(dá)式的全部或部分分成一個或多個組。其中分組使用字符“(” 和“)” . 括號里的內(nèi)容會當(dāng)成一個整體處理。例如 (abc)1,2 可以匹配 abcabc 。 例如 匹配一個簡單的IP地址: (d1,3.)3d1,38.1.8 向后引用: 當(dāng)一個正則表達(dá)式被分組后,每個組會自動獲得一個組號,該組號可以代表該組的表達(dá)式。以(為標(biāo)注,第一組是 1,第二組是2 。反向引用提供了查找重復(fù)字符組的方便方法。他被認(rèn)為是再次匹配同一字符串的快捷指令。向后引用表達(dá)式說明數(shù)字使用數(shù)字命名的后向引用k使用指定命名的后向引用(。Net Framework 所支持)例1 匹配連個重復(fù)字符的單詞 b(w)1b 可以匹配 aa.他和 b(w)wb 是不同的。 后者兩個字符可以不同。例 2 匹配以兩個重復(fù)字符結(jié)尾的單詞: bw*(w+)1b 匹配 abb , abcbc例3 匹配重復(fù)出現(xiàn)的單詞: b(w+)bs+1b 匹配 abc abc 步驟 b(w+)b 表示匹配一個單詞,長度至少是1 s+ 表示多個空格 1 表示重復(fù)子表達(dá)式(w+)匹配的內(nèi)容 b 表示結(jié)束分組不但可以使用數(shù)字作為組號,還可以使用自定義名稱作為組號。下面正則表達(dá)式都是將分組后的子表達(dá)式w命名為”word” (?w+)或 (?wordw+) 因此,正則表達(dá)式 b(w+)bs+1b 和以下正則表達(dá)式等價,都是匹配重復(fù)出現(xiàn)的單詞。 b(?w+)bs+kb 以下正則表達(dá)式和正則表達(dá)式bw*(w+)1b 等價,也是匹配以兩個重復(fù)字符結(jié)尾的單詞。 bw*(?w+)kb 常用分組說明:字符說明(expression)匹配字符串 expression,并將匹配的文本保存到自動命名的組里(? expression)匹配字符串 expression,并將匹配的文本以name進(jìn)行命名,該名稱不能包含標(biāo)點符號,不能以數(shù)字開頭。(?: expression)匹配字符串 expression,不保存匹配的文本,不給此組分配組號(?= expression)匹配字符串 expression前面的位置(?! Expression)匹配后面不是字符串expression的位置(?= expression)匹配字符串expression后面的位置(? expression)只匹配字符串expression 一次8.1.9 零寬度斷言: 元字符 b、 、$都匹配一個位置,且這個位置滿足一定的條件。在此把滿足某一個條件成為斷言或零寬度斷言。說明表如下:字符斷言說明匹配行的開始位置$匹配行的結(jié)束位置A匹配必須出現(xiàn)在字符串的開頭Z匹配必須出現(xiàn)在字符串的結(jié)尾或字符串結(jié)尾處的換行號n前z匹配必須出現(xiàn)在字符串結(jié)尾G匹配必須出現(xiàn)在上一個匹配結(jié)束的地方b匹配單詞的開始或結(jié)束的位置B匹配不是在單詞的開始或結(jié)束位置(?=expression) 又稱零寬度正預(yù)測先行斷言,他斷言自身位置的前面能夠匹配的表達(dá)式expression.下面以正則表達(dá)式匹配以字符串 ”ed” 結(jié)尾的單詞前面的部分。即匹配單詞除了”ed”的部分。 bw+(?=edb)(?=expression)又稱為零寬度正回顧后發(fā)斷言,他斷言自身位置的后面能夠匹配表達(dá)式。下面匹配以“aa”開頭的單詞。 b(?=baa)w+b8.1.10 負(fù)向零寬度斷言:零寬度斷言只能指定或匹配一個位置。而負(fù)向零寬度斷言與零寬度斷言恰恰相反,他能夠指定或匹配不是一個位置,即所說的“反義”。特別是在匹配字符串中不包含指定字符的時候,特別有用。以下表達(dá)式 a(?!b) 表示字符”a”之后不能為字符”b”. bw*a(?!b)w*b 表達(dá)式(?!expression)又稱為負(fù)向零寬度斷言或零寬度負(fù)預(yù)測先行斷言,他斷言自身位置的后面不能匹配字符串expression. 以下正則表達(dá)式首先匹配長度為3的字符串,該字符串后面不能是數(shù)字字符串。bw3(?!d+) 表達(dá)式(?!expression) 又稱為零寬度負(fù)回顧后發(fā)斷言,他斷言自身位置前面不能匹配字符串expression.以下正則表達(dá)式匹配不能以數(shù)字口頭的字符,改字符串只能包括大寫字符,小寫字母,或下劃線.(?!d+)a-z_A-Z+匹配HTML標(biāo)記 : * 解釋如下 可以匹配除了右尖括號以外的任何字符* 可以匹配空字符串或除右尖括號之外的任何字符組合的字符串。 匹配HTML右尖括號8.2 數(shù)字驗證8.2.1 數(shù)值驗證 1)只包含數(shù)字,任意長度的字符串驗證只包含數(shù)字長度可以為0、1或大于1 的整數(shù)(1) d+ (2) d0, (3) 0-9* (4) 0123456789*驗證只包含數(shù)字,長度大于或等于1的字符串(1) d+(2) d1,(3) dd*(4) d?d+(5) d0,1d1,(6) 0-9+(7) 0123456789+2)驗證只包含數(shù)字的,指定長度的字符串驗證只包含數(shù)字的,長度是1的字符串(1)d (2) d1,1 (3) 0-9 (4) 0123456789驗證只包含數(shù)字的長度是3的字符串 (位數(shù)很小的時候)(1) ddd(2) 0-90-90-9 如果位數(shù)很大,(n 很大)(1) dn(2) dn,n(3) 0-9n,n(4) ddn-1,n-1例如給的 “012345” ,d匹配第一個數(shù)字0,d5,5匹配第二個數(shù)后面的數(shù)字(5) 0-90-9n-1,n-1java 正則表達(dá)式應(yīng)用 在JAVA 中使用正則表達(dá)式,要引入 java.util.regex 包。這個包內(nèi)包含了與正則表達(dá)式相關(guān)的Pattern類、Matcher類等。Pattern類表示以字符串形式指定的正則表達(dá)式,而Matcher 類的實例用于匹配字符串與給定的模式。一個正則表達(dá)式編譯成一個Pattern類的對象,這個Pattern對象將會使用Pattern類的matcher() 方法來產(chǎn)生一個Matcher對象;接下來就可以使用改Matcher實例編譯正則表達(dá)式。主要Matcher對象可以公用一個Pattern對象。 8.2.1 Pattern類:以字符串的形式指定正則表達(dá)式的編譯表示形式。Pattern類沒有構(gòu)造方法,而是使用類方法compile() 生成一個Pattern對象,方法如下: 1) static Pattern compile(String regex) 將給定的正則表達(dá)式regex編譯并將其賦值給一個Pattern對象。 2)static Pattern compile(String regex,int flags): 該方法與上一個方法區(qū)別是增加了參數(shù) flag。參數(shù)可以是 CASE_INSENSITIVE 、MULTILINE 、DOTALL、UNICODE_CASE、CANON_EQ 、UNIX_LINES、LITERAL和COMMENTS。Flag參數(shù)是用來改變處理正則表達(dá)式的方式,如MULTILINE表示更改和$的含義,使其分別表示任意一行的行首和行尾匹配,而不僅僅在整個字符串的開頭和結(jié)尾匹配3)public int flage() 返回Pattern模式類的flag參數(shù)4)public Matcher matcher(CharSequence input) 使用指定參數(shù)input生成一個匹配器Matcher對象5)public static Boolean matcher(String regex,CharSequence input) 表示利用給定的正則表達(dá)式對參數(shù)指定的input字符串進(jìn)行匹配,匹配模式尾該正則表達(dá)式模式6)public String pattern() 返回Pattern對象所編譯的正則表達(dá)式的字符串形式7)public String split(CharSequence input)將參數(shù)input按照Pattern里所包含的正則表達(dá)式進(jìn)行分割,返回一個字符串?dāng)?shù)組8)public String split(CharSequence input, int limit) limit 是用來控制返回字符串?dāng)?shù)組的長度的。例如:import java.util.regex.Pattern;Pattern p=Ppile(/);String s=p.split(你好/今天星期1/天氣晴朗);for(int i=0;is.length;i+)System.out.println(si);8.2.2 Matcher 類: Matcher對象是由Pattern類的方法matcher(CharSequence input) 生成的。 1) public Matcher matcher(CharSequence input) 使用指定參數(shù)input 生成一個匹配器對象,接著就可以利用這個生成的matcher對象對指定的字符串進(jìn)行匹配。 Matcher提供了如下方法2) public Matcher appendReplacement(StringBuffer sb,String replacement) 將當(dāng)前匹配的子字符替換為指定的字符串,然后將替換后的字符串和兩次匹配之間的子字符串添加到一個StringBuffer里。 3)public StringBuffer appendTail(StringBuffer sb)將最后一次匹配后剩余的字符串添加到一個StringBuffer對象里。4)public int end()返回當(dāng)前匹配的子字符串的最后一個字符在原來的字符串中的索引位置5)public boolean find() 用于查找字符串中與模式匹配的下一個子字符串。此方法從匹配器的開頭開始;匹配器的開頭由上次匹配結(jié)果決定。如果匹配器被重置,則從匹配字符串開頭開始。6)public Boolean find(int start) 重新設(shè)置匹配器,并且在目標(biāo)字符的指定位置開始查找子字符串。7)public String group()返回當(dāng)前查找獲得的與組匹配的所有子字符串的內(nèi)容8)public String grout(int grout) 返回當(dāng)前查找獲得的與指定的組匹配的子字符串內(nèi)容。9)public int groupCount() 返回當(dāng)前查找匹配的組的數(shù)量10)public boolean lookingAt() 檢測目標(biāo)字符串是否以匹配的子字符串起始。11)public boolean matches() 判斷整個字符串是否匹配,如果匹配返回true;否則返回false12)public Pattern pattern() 返回該匹配器對象的現(xiàn)有匹配模式。也就是Pattern對象13)public String replaceAll(String replacement) 將目標(biāo)字符串里與現(xiàn)有pattern模式相匹配的子字符串全部替換為指定的字符串14)public String replaceFirst(String replacement) 將目標(biāo)字符串第一個與現(xiàn)有的Pattern模式匹配的子字符串替換為指定的字符串15)public Matcher reset() 重新設(shè)置匹配器對象16)public Matcher reset(CharSequence input) 重新設(shè)置匹配器對象,并指定一個新的目標(biāo)字符串參數(shù)作為目標(biāo)字符串17)public int start() 返回當(dāng)前查找所獲得的子字符串的開始字符在原目標(biāo)字符串中的位置18)public int start(int group)返回當(dāng)前查找所獲得的,和指定組匹配的子字符串的第一個字符在原目標(biāo)字符串中的位置。例1:package xing;import java.util.regex.Matcher;import java.util.regex.Pattern;public class zheng public static void main(String args) Pattern p=Ppile(xiaoming);Matcher m=p.matcher(ok,xiaoming 1234xiaoming 567xiaoming);StringBuffer sb=new StringBuffer();int i=0;boolean f=m.find();while(f)i+;m.appendReplacement(sb,xing);System.out.println(第+i+次+sb);f=m.find();m.appendTail(sb);System.out.println(-+sb); 例2 Pattern p=Ppile(ca)(t);Ma
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江西旅游商貿(mào)職業(yè)學(xué)院《綜合媒介與材料表現(xiàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 貴州工貿(mào)職業(yè)學(xué)院《家具產(chǎn)品效果圖制》2023-2024學(xué)年第二學(xué)期期末試卷
- 贛州職業(yè)技術(shù)學(xué)院《組織與胚胎學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖南師范大學(xué)《動物分子細(xì)胞生物學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 廈門海洋職業(yè)技術(shù)學(xué)院《英語新聞采訪與寫作》2023-2024學(xué)年第二學(xué)期期末試卷
- 云南經(jīng)濟(jì)管理學(xué)院《教師口語藝術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 天津工業(yè)職業(yè)學(xué)院《實驗室生物安全》2023-2024學(xué)年第二學(xué)期期末試卷
- 江西泰豪動漫職業(yè)學(xué)院《教育法規(guī)概論》2023-2024學(xué)年第二學(xué)期期末試卷
- 拉薩師范高等??茖W(xué)?!渡镔|(zhì)能》2023-2024學(xué)年第二學(xué)期期末試卷
- 泉州經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院《數(shù)字化建筑設(shè)計》2023-2024學(xué)年第二學(xué)期期末試卷
- 水泥粉磨工藝流程
- KRONES灌裝檢測工作原理及工藝參數(shù)調(diào)整
- 不同碳減排下生物質(zhì)氣化制綠色甲醇的經(jīng)濟(jì)性分析
- 液壓與氣動技術(shù)(第2版)全冊電子教案模塊1-7教學(xué)設(shè)計(高職)
- 《疼痛管理策略》課件
- SJG 01-2010 深圳市地基基礎(chǔ)勘察設(shè)計規(guī)范
- 中國糖尿病防治指南(2024版)解讀
- 物業(yè)維修流程培訓(xùn)
- 智研咨詢發(fā)布:2025年中國科技館行業(yè)競爭格局及發(fā)展前景研究報告
- 大學(xué)美育(同濟(jì)大學(xué))學(xué)習(xí)通測試及答案
- 2024年中考模擬試卷數(shù)學(xué)(湖南卷)
評論
0/150
提交評論