在我們的工作中环凿,往往要有很多用到檢測的地方,畢竟你給用戶來輸入是一件可怕的事情放吩。特別是在應(yīng)用的注冊等頁面智听,我們需要對用戶輸入的字符進行合法性檢測。這個時候使用正則表達式是非常簡(ti)單(sheng)方(bi)便(ge)的。
1.基本語法
特殊的符號"^"與"$",分別表示一個字符串的開始與結(jié)束到推。
"^dog":表示以"dog"開頭的字符串("dog product","dog123","dog" )
類似于:- (BOOL)hasPrefix:(NSString *)aString;
"dog$":表示以dog為結(jié)尾的字符串("Product Manager is a dog", "it is a dog")
類似于:- (BOOL)hasSuffix:(NSString *)aString;
"^apple$":表示以"apple"開頭且以"apple"結(jié)尾的字符串
"banana":表示任何包含"banana"的字符串
類似于 iOS8的新方法- (BOOL)containsString:(NSString *)aString,搜索子串用的考赛。
"*","+","?":分別表示"沒有或更多([0, +∞)取整數(shù))","一個或更多([1,+∞)取整數(shù))","沒有或一個([0,1]取整數(shù))"
"ab*":表示一個"a"后面按跟著0個或者N個"b"("a","ab","abbbf",這里并沒有說是以b結(jié)尾)
"ab+":表示一個"a"后面跟著至少一個"b"("ab","abb")
"ab?":表示一個"a"后面跟著一個或者0個"b"("a","abc","af")
"a?b+$":表示字符串末尾有0個或者1個"a"或1個"a"跟著1個或者多個"b"("ab","b","bbb","abbbb",......)
可以用大括號括起來({}),表示一個重復(fù)的具體范圍莉测。例如
"ab{4}":表示一個"a"跟著4個"b","abbbb"
'''ab{1,}':表示一個"a"跟著至少1個"b",("ab","abb",....)
"ab{3,4}":表示一個"a"跟著3個或者4個"b"("abbb","abbbb")
所以"*"等于{0,},"+"等于{1,},"?"等于{0,1}颜骤。
注意:可以沒有上線,但是不能沒有下線{,5}為錯誤寫法捣卤。
"|"表示“或”操作
"a|b":表示一個字符串中含有"a"或者"b"
"(a|bcd)ef":表示"aef"或者"bcdef"
"(a|b)*c":表示"a"或者"b"后面跟著0或者多個"c"("a","b","ac","accccc","bc","bcccc")
方括號”[ ]“表示在括號內(nèi)的眾多字符中忍抽,選擇1-N個括號內(nèi)的符合語法的字符作為結(jié)果,例如
"[ab]":表示一個字符串含有"a"或"b"董朝,等價于"a|b"
"[a-d]":表示一個字符串包含a-d中的一個锈锤,等價于"a|b|c|d"或者"[abcd]"
"^[a-zA-Z]":表示以字母開頭的字符串扭弧。
"[0-9]a":表示"a"前面有一個數(shù)字。
"[a-zA-Z0-9]$":表示一個字符串以字母或者數(shù)字結(jié)尾衣赶。
".":表示除了"\n","\r"之外的任意單個字符串。
"a.[a-z]":表示一個"a"后面你跟著一個任意一個字符串和一個小寫字母。
"^.{5}$":表示任意一個長度是5的字符串。
“\num” 其中num是一個正整數(shù)换况。表示”\num”之前的字符出現(xiàn)相同的個數(shù),例如
"(.)\1":表示兩個連續(xù)相同的字符。
"10\{1,2\}":表示"1"后面跟著1個或者2個"0"("10","100")
"0\{3,\}":表示至少有3個連續(xù)的"0"("000","0000")
在方括號里用’^'表示不希望出現(xiàn)的字符,’^'應(yīng)在方括號里的第一位。
"@[^a-zA-Z]@":表示兩個"@"之間不應(yīng)該有字母。
常用的正則:
"\d":匹配一個數(shù)字字符,等價于"[0-9]".
"\D":匹配一個非數(shù)字字符,等價于"[^0-9]"
"\w":匹配包括下劃線的任何單詞字符柜思,等價于"[a-zA-Z0-9_]"
"\W":匹配任何非單詞字符亡脑,等價于"[^a-zA-Z0-9_]"
iOS中書寫正則表達式,碰到轉(zhuǎn)義字符蛙紫,多加一個“\”,例如:
全數(shù)字字符:@”^\\d\+$”
2.一些常用的正則表達式
(1)驗證電話號碼:(”^(\\d{3,4}-)\\d{7,8}$”)
(2)驗證Email地址:(“^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\.\\w+([-.]\\w+)*$”)拍屑;
(3)整數(shù)或者小數(shù):^[0-9]+([.]{0,1}[0-9]+){0,1}$
(4)只能輸入數(shù)字:”^[0-9]*$”。
(5)只能輸入由26個英文字母組成的字符串:”^[A-Za-z]+$”坑傅。 (6)驗證是否含有^%&’,;=?$\”等字符:”[^%&',;=?$\x22]+”僵驰。 (7)只能輸入漢字:”^[\u4e00-\u9fa5]{0,}$”。
(8).驗證一年的12個月:”^(0?[1-9]|1[0-2])$”正確格式為:”01″~”09″和”10″~”12″。
(9)驗證一個月的31天:”^((0?[1-9])|((1|2)[0-9])|30|31)$”正確格式為蒜茴;”01″~”09″星爪、”10″~”29″和“30”~“31”。
(10)獲取日期正則表達式:\\d{4}[年|\-|\.]\\d{\1-\12}[月|\-|\.]\\d{\1-\31}日? 注:可用來匹配大多數(shù)年月日信息粉私。
(11)匹配空白行的正則表達式:\n\s*\r 注:可以用來刪除空白行
(12)匹配帳號是否合法(字母開頭顽腾,允許5-16字節(jié),允許字母數(shù)字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 注:表單驗證時很實用
(13)匹配騰訊QQ號:[1-9][0-9]{4,14} 注:騰訊QQ號從10 000 開始
(14)匹配中國郵政編碼:[1-9]\\d{5}(?!\d) 注:中國郵政編碼為6位數(shù)字
(15)匹配ip地址:((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)诺核。
1.驗證用戶名和密碼:”^[a-zA-Z]\w{5,15}$”
2.驗證電話號碼:(”^([\\d{3,4}-)\\d{7,8}$] eg:021-68686868 0511-6868686抄肖;
3.驗證手機號碼:”^1[3|4|5|7|8][0-9]\\d{8}$”;
4.驗證身份證號(15位或18位數(shù)字):”\\d{14}[[0-9],0-9xX]”
5.驗證Email地址:(“^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\.\\w+([-.]\\w+)*$”);
6.只能輸入由數(shù)字和26個英文字母組成的字符串:(“^[A-Za-z0-9]+$”) ;
7.整數(shù)或者小數(shù):^[0-9]+([.]{0,1}[0-9]+){0,1}$
8.只能輸入數(shù)字:”^[0-9]*$”窖杀。
9.只能輸入n位的數(shù)字:”^\\d{n}$”漓摩。
10.只能輸入至少n位的數(shù)字:”^\\d{n,}$”。
11.只能輸入m~n位的數(shù)字:”^\\d{m,n}$”入客。
12.只能輸入零和非零開頭的數(shù)字:”^(0|[1-9][0-9]*)$”管毙。
13.只能輸入有兩位小數(shù)的正實數(shù):”^[0-9]+(.[0-9]{2})?$”。
14.只能輸入有1~3位小數(shù)的正實數(shù):”^[0-9]+(\.[0-9]{1,3})?$”桌硫。
15.只能輸入非零的正整數(shù):”^\+?[1-9][0-9]*$”夭咬。
16.只能輸入非零的負(fù)整數(shù):”^\-[1-9][]0-9″*$。
17.只能輸入長度為3的字符:”^.{3}$”鞍泉。
18.只能輸入由26個英文字母組成的字符串:”^[A-Za-z]+$”皱埠。
19.只能輸入由26個大寫英文字母組成的字符串:”^[A-Z]+$”。
20.只能輸入由26個小寫英文字母組成的字符串:”^[a-z]+$”咖驮。
21.驗證是否含有^%&’,;=?$\”等字符:”[^%&',;=?$\x22]+”边器。
22.只能輸入漢字:”^[\u4e00-\u9fa5]{0,}$”。
23.驗證URL:”^http://([\\w-]+\.)+[\\w-]+(/[\\w-./?%&=]*)?$”托修。
24.驗證一年的12個月:”^(0?[1-9]|1[0-2])$”正確格式為:”01″~”09″和”10″~”12″忘巧。
25.驗證一個月的31天:”^((0?[1-9])|((1|2)[0-9])|30|31)$”正確格式為;”01″~”09″睦刃、”10″~”29″和“30”~“31”砚嘴。
26.獲取日期正則表達式:[\\d{4]}[年|\-|\.]\\d{\1-\12}[月|\-|\.]\\d{\1-\31}日? 評注:可用來匹配大多數(shù)年月日信息。
27.匹配雙字節(jié)字符(包括漢字在內(nèi)):[^\x00-\xff] 評注:可以用來計算字符串的長度(一個雙字節(jié)字符長度計2涩拙,ASCII字符計1)
28.匹配空白行的正則表達式:\n\s*\r 評注:可以用來刪除空白行
29.匹配HTML標(biāo)記的正則表達式:<(\S*?)[^>]*>.*?</>|<.*? /> 評注:網(wǎng)上流傳的版本太糟糕际长,上面這個也僅僅能匹配部分,對于復(fù)雜的嵌套標(biāo)記依舊無能為力
30.匹配首尾空白字符的正則表達式:^\s*|\s*$ 評注:可以用來刪除行首行尾的空白字符(包括空格兴泥、制表符工育、換頁符等等),非常有用的表達式
31.匹配網(wǎng)址URL的正則表達式:[a-zA-z]+://[^\s]* 評注:網(wǎng)上流傳的版本功能很有限搓彻,上面這個基本可以滿足需求
32.匹配帳號是否合法(字母開頭如绸,允許5-16字節(jié)嘱朽,允許字母數(shù)字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 評注:表單驗證時很實用
33.匹配騰訊QQ號:[1-9][0-9]{4,14} 評注:騰訊QQ號從10 000 開始
34.匹配中國郵政編碼:[1-9]\\d{5}(?!\d) 評注:中國郵政編碼為6位數(shù)字
35.匹配ip地址:((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)。 下面給出正則表達式的元字符(來自百度百科)
3.在iOS中的簡單應(yīng)用
iOS中一般都是用NSPredicate來實現(xiàn)
//驗證是不是QQ號
NSString *pattern = @"[1-9][0-9]{4,14}";
NSPredicate * pre = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];
BOOL isMatch = [pre evaluateWithObject:self.enterText.text];
這里注意如果正則表達式中含有轉(zhuǎn)義字符一定要加"\"