亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Regex > 正文

IOS開發常用的正則表達式

2020-03-16 21:02:29
字體:
來源:轉載
供稿:網友

正則表達式是一種用來進行文本匹配的工具,其語法非常精簡,這篇文章是小編日常整理了些有關ios開發常用的正則表達式,非常具有借鑒價值,感興趣的朋友快來一起學習學習吧

正則表達式是一種用來進行文本匹配的工具,其語法優美簡潔。在開發中,查找、對比以及匹配字符串是家常便飯的業務,通過正則表達式我們將這些業務描述成某些需求規則,來讓我們的代碼更美觀、實用。例如我們要驗證用戶輸入的密碼長度是否滿足6~18位的長度,新手最常見的驗證方式是判斷輸入的密碼長度

return (textField.text.length >= 6 && textField.text.leng <= 18);

盡管這種判斷方式沒有任何問題,而上面的驗證換做正則表達式的匹配字符就顯得短小精悍

^.{6,18}$

還有,大部分的固定電話都是0區號-八位數字的格式,那么正則表達式的匹配如下

^0//d{2}/-?//d{8}$

再比如,對于密碼強度的認證。如今的密碼應該包括一個或以上的大寫字母以及小寫字母,對此正則表達式的匹配是

(^.*[A-Z]+.*[a-z]+.*$|^.*[a-z]+.*[A-Z]+.*$)

表達式字符解析

如果是新手開發者,那么很有可能不理解上面的正則表達式。那么我們先看第一個匹配條件,匹配6-18位的密碼長度。根據題目的要求,就能夠輕易的判斷出{6,18}表示6-18位。其中,{n}匹配字符重復n次;{n,}匹配重復n次或更多次;{n,m}匹配重復n到m之間次數。

那么讀者對^、.和$三個符號可能不明所以。^和$屬于特殊符號,前者表示匹配字符串的開頭,后者表示匹配字符串的結尾。由于我們有時需要在一段很長的字符串中匹配某些小片段字符串時(比如在圖文混編中匹配長字符串中留空的表情符號),適當使用這兩個符號可以減少匹配次數,提高執行效率。

那么結合這幾個字符代表含義,可以得出.符號表示任一字符(除換行符之外)。那么還可以得出{6,18}這個特殊符號表示的是前一個符號代表的位數。結合起來說^.{6,18}$匹配一段6至18位長度的字符串,所以可以用來驗證密碼長度

當然了,.字符的匹配率太高,更多時候我們需要匹配的是具體到數字或者字母,甚至準確的數字和字母。那么除了.字符以外,還有/d用來表示任意的單個數字,/w表示任意一個字母或數字或者直接使用0-9的任意數字表示具體數字。而特殊符號?表示前一個字符為0或者1個。

所以上面的^0//d{2}/-?//d{8}$匹配了以數字0開頭,接著兩個數字,后面跟著-號跟八個數字,然后結尾的字符串,不管是010-88888888,還是02098989898都能進行正確匹配。

最后的一個表達式可能是最復雜的表達式,根據上面對部分符號的解析。我們可以把

^.*[A-Z]+.*[a-z]+.*$|^.*[a-z]+.*[A-Z]+.*$

拆分成 ^.*[A-Z]+.*[a-z]+.*$ 跟 ^.*[a-z]+.*[A-Z]+.*$

這兩個單獨的表達式,而中間的|不難猜到就是邏輯的或。我們將對前一個進行拆分,來一步步識別這個表達式的匹配規則。這里教大家我拆分表達式的方法:我把表達式的字符分為兩類:值表達和修飾表達。所謂值表達就是說這個符號表示了某個值,就像/d表示數字,.表示任意非換行符字符。修飾表達用來修飾值達成某種條件,比如{2}表示前面一個值重復兩次,*表示前一個值重復0次或者更多次。根據這種方法,那么^.*[A-Z]+.*[a-z]+.*$可以拆分成部分:^$、 .* 、 [A-Z]+ 、 [a-z]+。

^$就不再多說。

.*這里要介紹的就是*表示前一個值符號重復任意次數。

[A-Z]+中-表示從左邊的值到右邊的值之間所有值形成的閉集合;[]方括號表示的值必須是括號中間集合的子集,要注意的是括號里面可以有多個集合,比如[A-Z0-9a-z]表示匹配任意一個大小寫字母或數字;+同*有點像,但是+表示的是至少一個的重復值。

結合上面的解析,那么^.*[A-Z]+.*[a-z]+.*$表示以任意數量的字符開頭,然后跟著一個大寫字母,大寫字母后面有任意數量的字符以及一個小寫字母,然后又是任意數量的數字、字母或者字符。而^.*[a-z]+.*[A-Z]+.*$表示小寫字母在大寫字母前面任意數量的字符的位置,兩個結合匹配可以確保字符串中包括至少一個小寫字母和一個大寫字母。

ps:有一點要注意,上面展示的表達式解析時/d這些特殊符號在我們的代碼中多了一個/,這是因為/本身是轉義符號,為了保證表達式能正常匹配,我們要給/進行一次轉義,所以就變成了//?;旧纤械姆栕址夹枰D義。

語法/字符說明表

值表達

. 匹配除換行符外的任意字符

/w 匹配字母或者數字的字符

/W 匹配任意不是字母或數字的字符

/s 匹配任意的空白符(空格、制表符、換行符)

/S 匹配任意不是空白符的字符

/d 匹配任意數字

/D 匹配任意非數字的字符

/b 匹配單詞的結尾或者開頭的字符

/B 匹配任意不是單詞結尾或開頭的字符

[^x] 匹配任意非x的字符。如[^[a-z]]匹配非小寫字母的任意字符

^ 匹配字符串的開頭

$ 匹配字符串的結尾

修飾表達

* 匹配重復任意次數

+ 匹配重復一次以上的次數

? 匹配一次或零次

{n} 匹配重復n次

{n,} 匹配重復n次或n次以上

{n,m} 匹配重復最少n次最多m次

除了上面列出的字符外,還有包括表示位置指定等較難運用的其他正則表達式,但上面的字符已經足夠我們正常使用了。想了解更多知識可以度娘Google。

代碼實操

上面我們只是簡單的講解了正則表達式中各個字符代表的意義,那么在iOS開發中應該怎么使用。對于有意使用正則規則來匹配的開發者,我的建議是封裝成為類別方法,一次封裝,多次調用。下面用我自己封裝的代碼進行說明。這些方法通過擴展UITextField方法來實現:

@interface UITextField (LXDValidate)

/*! 判斷文本框是否為空(非正則表達式)*/

- (BOOL)isEmpty;

/*! 判斷郵箱是否正確*/

- (BOOL)validateEmail;

/*! 判斷驗證碼是否正確*/

- (BOOL)validateAuthen;

/*! 判斷密碼格式是否正確*/

- (BOOL)validatePassword;

/*! 判斷手機號碼是否正確*/

- (BOOL)validatePhoneNumber;

/*! 自己寫正則傳入進行判斷*/

- (BOOL)validateWithRegExp: (NSString *)regExp;

@end

方法實現文件:

 

 
  1. #import "UITextField+LXDValidate.h" 
  2. @implementation UITextField (LXDValidate) 
  3. - (BOOL)isEmpty 
  4. return self.text.length == ; 
  5. - (BOOL)validateEmail 
  6. return [self validateWithRegExp: @"^[a-zA-Z-]{,}@[a-z-A-Z]{,}//.[a-zA-Z]{,}$"]; 
  7. - (BOOL)validateAuthen 
  8. return [self validateWithRegExp: @"^//d{,}$"]; 
  9. - (BOOL)validatePassword 
  10. NSString * length = @"^//w{,}$"//長度 
  11. NSString * number = @"^//w*//d+//w*$"//數字 
  12. NSString * lower = @"^//w*[a-z]+//w*$"//小寫字母 
  13. NSString * upper = @"^//w*[A-Z]+//w*$"//大寫字母 
  14. return [self validateWithRegExp: length] && [self validateWithRegExp: number] && [self validateWithRegExp: lower] && [self validateWithRegExp: upper]; 
  15. - (BOOL)validatePhoneNumber 
  16. NSString * reg = @"^//d{}$"
  17. return [self validateWithRegExp: reg]; 
  18. - (BOOL)validateWithRegExp: (NSString *)regExp 
  19. NSPredicate * predicate = [NSPredicate predicateWithFormat: @"SELF MATCHES %@", regExp]; 
  20. return [predicate evaluateWithObject: self.text]; 
  21. @end 

以上內容是小編給大家介紹的有關IOS開發常用的正則表達式,希望大家喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品三级网站| 在线观看亚洲区| 精品中文字幕久久久久久| 欧美洲成人男女午夜视频| 91国产视频在线| 色婷婷亚洲mv天堂mv在影片| 欧美制服第一页| 韩剧1988免费观看全集| 久久久久久久久久久亚洲| 91丝袜美腿美女视频网站| 亚洲欧洲免费视频| 国产精品盗摄久久久| 欧美亚洲伦理www| 粉嫩老牛aⅴ一区二区三区| 亚洲欧美在线磁力| 亚洲美女av在线| 成人精品一区二区三区电影黑人| 日韩va亚洲va欧洲va国产| 国产精品揄拍一区二区| 成人在线播放av| 国产精品免费一区豆花| 久久99久久久久久久噜噜| 日韩精品视频在线观看免费| 亚洲一二三在线| 久久久免费在线观看| 成人h视频在线| 久久精品久久久久| 欧美激情精品久久久久久变态| 亚洲色在线视频| 超碰91人人草人人干| 中文字幕日本精品| 日本高清+成人网在线观看| www.亚洲免费视频| 精品久久久在线观看| 中文字幕在线成人| 91精品啪在线观看麻豆免费| 久久综合色影院| 91亚洲精品久久久久久久久久久久| 国产精品中文久久久久久久| 亚洲mm色国产网站| 日韩精品在线视频观看| 日韩中文字幕不卡视频| 久久91亚洲人成电影网站| 亚洲高清久久久久久| 51精品在线观看| 亚洲人成在线电影| 欧美日韩国产综合视频在线观看中文| 亚洲人成电影在线| 日本久久久久久| 欧美一区二区色| 日韩电影免费观看在线| 欧美性猛交xxxx| 欧美日韩国产va另类| 国产伦精品免费视频| 欧美另类第一页| 成人夜晚看av| 免费91麻豆精品国产自产在线观看| 国产成人97精品免费看片| 北条麻妃一区二区在线观看| 91久久久国产精品| 亚洲a级在线播放观看| 久久国产精品久久久久| 国产视频在线一区二区| 亚洲自拍中文字幕| 丝袜情趣国产精品| 伊人久久久久久久久久久久久| 久久久久久久久久久av| 91久久精品国产91久久性色| 欧美激情久久久久| 97在线视频精品| 午夜精品福利电影| 欧美极品少妇xxxxⅹ免费视频| 欧美理论电影在线播放| 尤物tv国产一区| 欧美性极品xxxx娇小| xvideos国产精品| 欧美激情一区二区三区高清视频| 国产精品久久久久99| 啊v视频在线一区二区三区| 九九九久久国产免费| 精品国产电影一区| 亚洲一区二区精品| 成人精品久久av网站| 久久躁狠狠躁夜夜爽| 日韩大片免费观看视频播放| 国产精品香蕉在线观看| 欧美性69xxxx肥| 亚洲欧美三级伦理| 亚洲视频免费一区| 欧美一区第一页| 亚洲自拍中文字幕| 热门国产精品亚洲第一区在线| 成人免费看片视频| 亚洲人成电影网站| 欧美精品久久久久a| 国产91ⅴ在线精品免费观看| 日韩专区中文字幕| 日韩亚洲综合在线| 中文字幕九色91在线| 国产日韩中文字幕| 亚洲第一区第一页| 欧美视频一二三| 久久99国产综合精品女同| 亚洲91精品在线| 亚洲第一男人天堂| 热门国产精品亚洲第一区在线| 国产精品三级美女白浆呻吟| 国产精品大陆在线观看| 在线精品国产成人综合| 欧美亚洲一区在线| 伊人av综合网| 久久精品免费电影| 欧美裸体xxxxx| 欧美精品一区二区免费| 俺去了亚洲欧美日韩| 精品久久久久国产| 久久精品小视频| 一本大道香蕉久在线播放29| 欧美老女人性视频| 97人人做人人爱| 欧洲中文字幕国产精品| 国产日韩欧美一二三区| 在线a欧美视频| 日本午夜精品理论片a级appf发布| 亚洲黄色免费三级| 国产精品亚洲激情| 亚洲国产免费av| 日韩av免费在线观看| 国产一区二区三区毛片| 国产免费亚洲高清| 日韩影视在线观看| 久久69精品久久久久久久电影好| 91精品视频在线| 成人a在线观看| 亚洲欧美激情精品一区二区| 欧美老女人在线视频| 亚洲精品第一国产综合精品| 26uuu久久噜噜噜噜| 久久九九免费视频| 成人免费高清完整版在线观看| 欧美日韩国产999| 欧美综合第一页| 国产亚洲精品久久久久久牛牛| 97国产suv精品一区二区62| 欧美日韩一区二区三区| 久久天天躁日日躁| 亚洲国产女人aaa毛片在线| 日韩欧美成人网| 亚洲天堂av综合网| 亚洲精品欧美一区二区三区| 久久天天躁狠狠躁夜夜躁2014| 亚洲国产成人久久| 日韩中文字幕视频| 日本午夜在线亚洲.国产| 亚洲午夜av久久乱码| 亚洲日本成人女熟在线观看| 亚洲视频在线看| 国产精品欧美日韩久久| 国产精品久久久久高潮| 亚洲在线免费观看| 亚洲精品久久久一区二区三区| 日本亚洲欧美成人| 国产日韩欧美自拍| 久久99亚洲热视|