正則表達式的應(yīng)用

在我們的工作中环凿,往往要有很多用到檢測的地方,畢竟你給用戶來輸入是一件可怕的事情放吩。特別是在應(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)義字符一定要加"\"

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末怔接,一起剝皮案震驚了整個濱河市搪泳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌扼脐,老刑警劉巖岸军,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異谎势,居然都是意外死亡凛膏,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門脏榆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來猖毫,“玉大人,你說我怎么就攤上這事须喂∮醵希” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵坞生,是天一觀的道長仔役。 經(jīng)常有香客問我,道長是己,這世上最難降的妖魔是什么又兵? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任柠逞,我火速辦了婚禮通今,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘刑巧。我一直安慰自己摔认,他們只是感情好逆皮,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著参袱,像睡著了一般电谣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上抹蚀,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天剿牺,我揣著相機與錄音,去河邊找鬼环壤。 笑死晒来,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的镐捧。 我是一名探鬼主播潜索,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼懂酱!你這毒婦竟也來了竹习?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤列牺,失蹤者是張志新(化名)和其女友劉穎整陌,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瞎领,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡泌辫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了九默。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片震放。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖驼修,靈堂內(nèi)的尸體忽然破棺而出殿遂,到底是詐尸還是另有隱情,我是刑警寧澤乙各,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布墨礁,位于F島的核電站,受9級特大地震影響耳峦,放射性物質(zhì)發(fā)生泄漏恩静。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一蹲坷、第九天 我趴在偏房一處隱蔽的房頂上張望驶乾。 院中可真熱鬧,春花似錦冠句、人聲如沸轻掩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽唇牧。三九已至,卻和暖如春聚唐,著一層夾襖步出監(jiān)牢的瞬間丐重,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工杆查, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留扮惦,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓亲桦,卻偏偏與公主長得像崖蜜,于是被迫代替她去往敵國和親浊仆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容