麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Regex > 正文

IOS開發(fā)常用的正則表達式

2020-03-22 18:19:20
字體:
供稿:網(wǎng)友
html' target='_blank'>正則表達式是一種用來進行文本匹配的工具,其語法優(yōu)美簡潔。在開發(fā)中,查找、對比以及匹配字符串是家常便飯的業(yè)務,通過正則表達式我們將這些業(yè)務描述成某些需求規(guī)則,來讓我們的代碼更美觀、實用。例如我們要驗證用戶輸入的密碼長度是否滿足6~18位的長度,新手最常見的驗證方式是判斷輸入的密碼長度return (textField.text.length = 6 && textField.text.leng = 18);盡管這種判斷方式?jīng)]有任何問題,而上面的驗證換做正則表達式的匹配字符就顯得短小精悍^.{6,18}$還有,大部分的固定電話都是0區(qū)號-八位數(shù)字的格式,那么正則表達式的匹配如下^0//d{2}/- //d{8}$再比如,對于密碼強度的認證。如今的密碼應該包括一個或以上的大寫字母以及小寫字母,對此正則表達式的匹配是(^.*[A-Z]+.*[a-z]+.*$|^.*[a-z]+.*[A-Z]+.*$)表達式字符解析如果是新手開發(fā)者,那么很有可能不理解上面的正則表達式。那么我們先看第一個匹配條件,匹配6-18位的密碼長度。根據(jù)題目的要求,就能夠輕易的判斷出{6,18}表示6-18位。其中,{n}匹配字符重復n次;{n,}匹配重復n次或更多次;{n,m}匹配重復n到m之間次數(shù)。那么讀者對^、.和$三個符號可能不明所以。^和$屬于特殊符號,前者表示匹配字符串的開頭,后者表示匹配字符串的結(jié)尾。由于我們有時需要在一段很長的字符串中匹配某些小片段字符串時(比如在圖文混編中匹配長字符串中留空的表情符號),適當使用這兩個符號可以減少匹配次數(shù),提高執(zhí)行效率。那么結(jié)合這幾個字符代表含義,可以得出.符號表示任一字符(除換行符之外)。那么還可以得出{6,18}這個特殊符號表示的是前一個符號代表的位數(shù)。結(jié)合起來說^.{6,18}$匹配一段6至18位長度的字符串,所以可以用來驗證密碼長度當然了,.字符的匹配率太高,更多時候我們需要匹配的是具體到數(shù)字或者字母,甚至準確的數(shù)字和字母。那么除了.字符以外,還有/d用來表示任意的單個數(shù)字,/w表示任意一個字母或數(shù)字或者直接使用0-9的任意數(shù)字表示具體數(shù)字。而特殊符號 表示前一個字符為0或者1個。所以上面的^0//d{2}/- //d{8}$匹配了以數(shù)字0開頭,接著兩個數(shù)字,后面跟著-號跟八個數(shù)字,然后結(jié)尾的字符串,不管是010-88888888,還是02098989898都能進行正確匹配。最后的一個表達式可能是最復雜的表達式,根據(jù)上面對部分符號的解析。我們可以把^.*[A-Z]+.*[a-z]+.*$|^.*[a-z]+.*[A-Z]+.*$拆分成 ^.*[A-Z]+.*[a-z]+.*$ 跟 ^.*[a-z]+.*[A-Z]+.*$這兩個單獨的表達式,而中間的|不難猜到就是邏輯的或。我們將對前一個進行拆分,來一步步識別這個表達式的匹配規(guī)則。這里教大家我拆分表達式的方法:我把表達式的字符分為兩類:值表達和修飾表達。所謂值表達就是說這個符號表示了某個值,就像/d表示數(shù)字,.表示任意非換行符字符。修飾表達用來修飾值達成某種條件,比如{2}表示前面一個值重復兩次,*表示前一個值重復0次或者更多次。根據(jù)這種方法,那么^.*[A-Z]+.*[a-z]+.*$可以拆分成部分:^$、 .* 、 [A-Z]+ 、 [a-z]+。^$就不再多說。.*這里要介紹的就是*表示前一個值符號重復任意次數(shù)。[A-Z]+中-表示從左邊的值到右邊的值之間所有值形成的閉集合;[]方括號表示的值必須是括號中間集合的子集,要注意的是括號里面可以有多個集合,比如[A-Z0-9a-z]表示匹配任意一個大小寫字母或數(shù)字;+同*有點像,但是+表示的是至少一個的重復值。結(jié)合上面的解析,那么^.*[A-Z]+.*[a-z]+.*$表示以任意數(shù)量的字符開頭,然后跟著一個大寫字母,大寫字母后面有任意數(shù)量的字符以及一個小寫字母,然后又是任意數(shù)量的數(shù)字、字母或者字符。而^.*[a-z]+.*[A-Z]+.*$表示小寫字母在大寫字母前面任意數(shù)量的字符的位置,兩個結(jié)合匹配可以確保字符串中包括至少一個小寫字母和一個大寫字母。ps:有一點要注意,上面展示的表達式解析時/d這些特殊符號在我們的代碼中多了一個/,這是因為/本身是轉(zhuǎn)義符號,為了保證表達式能正常匹配,我們要給/進行一次轉(zhuǎn)義,所以就變成了//。基本上所有的符號字符都需要轉(zhuǎn)義。語法/字符說明表值表達. 匹配除換行符外的任意字符/w 匹配字母或者數(shù)字的字符/W 匹配任意不是字母或數(shù)字的字符/s 匹配任意的空白符(空格、制表符、換行符)/S 匹配任意不是空白符的字符/d 匹配任意數(shù)字/D 匹配任意非數(shù)字的字符/b 匹配單詞的結(jié)尾或者開頭的字符/B 匹配任意不是單詞結(jié)尾或開頭的字符[^x] 匹配任意非x的字符。如[^[a-z]]匹配非小寫字母的任意字符^ 匹配字符串的開頭$ 匹配字符串的結(jié)尾修飾表達* 匹配重復任意次數(shù)+ 匹配重復一次以上的次數(shù) 匹配一次或零次{n} 匹配重復n次{n,} 匹配重復n次或n次以上{n,m} 匹配重復最少n次最多m次除了上面列出的字符外,還有包括表示位置指定等較難運用的其他正則表達式,但上面的字符已經(jīng)足夠我們正常使用了。想了解更多知識可以度娘Google。代碼實操上面我們只是簡單的講解了正則表達式中各個字符代表的意義,那么在iOS開發(fā)中應該怎么使用。對于有意使用正則規(guī)則來匹配的開發(fā)者,我的建議是封裝成為類別方法,一次封裝,多次調(diào)用。下面用我自己封裝的代碼進行說明。這些方法通過擴展UITextField方法來實現(xiàn):@interface UITextField (LXDValidate)
/*! 判斷文本框是否為空(非正則表達式)*/
- (BOOL)isEmpty;
/*! 判斷郵箱是否正確*/
- (BOOL)validateEmail;
/*! 判斷驗證碼是否正確*/
- (BOOL)validateAuthen;
/*! 判斷密碼格式是否正確*/
- (BOOL)validatePassword;
/*! 判斷手機號碼是否正確*/
- (BOOL)validatePhoneNumber;
/*! 自己寫正則傳入進行判斷*/
- (BOOL)validateWithRegExp: (NSString *)regExp;
@end方法實現(xiàn)文件:#import "UITextField+LXDValidate.h"@implementation UITextField (LXDValidate)- (BOOL)isEmptyreturn self.text.length == ;- (BOOL)validateEmailreturn [self validateWithRegExp: @"^[a-zA-Z-]{,}@[a-z-A-Z]{,}//.[a-zA-Z]{,}$"];- (BOOL)validateAuthenreturn [self validateWithRegExp: @"^//d{,}$"];- (BOOL)validatePasswordNSString * length = @"^//w{,}$"; //長度NSString * number = @"^//w*//d+//w*$"; //數(shù)字NSString * lower = @"^//w*[a-z]+//w*$"; //小寫字母NSString * upper = @"^//w*[A-Z]+//w*$"; //大寫字母return [self validateWithRegExp: length] && [self validateWithRegExp: number] && [self validateWithRegExp: lower] && [self validateWithRegExp: upper];- (BOOL)validatePhoneNumberNSString * reg = @"^//d{}$";return [self validateWithRegExp: reg];- (BOOL)validateWithRegExp: (NSString *)regExpNSPredicate * predicate = [NSPredicate predicateWithFormat: @"SELF MATCHES %@", regExp];return [predicate evaluateWithObject: self.text];以上內(nèi)容是小編給大家介紹的有關(guān)IOS開發(fā)常用的正則表達式,希望大家喜歡。PHP教程

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 草久影视 | 日本精品久久久一区二区三区 | 羞羞视频免费网站含羞草 | 亚洲成人在线视频网站 | 国产亚洲黑人性受xxxx精品 | 国产精品福利一区 | 国产精品一区二区三区99 | 羞羞视频入口 | 一区在线不卡 | 免费黄网站在线播放 | 九九热精品视频在线 | 国产精品视频一区二区三区四区国 | 污片在线观看视频 | 久久精精| 国产成人高潮免费观看精品 | 双性精h调教灌尿打屁股的文案 | 97久久日一线二线三线 | 久啪视频| 精国品产一区二区三区有限公司 | 中文字幕爱爱视频 | 久久毛片免费 | 亚洲综合视频网站 | 免费观看一级欧美大 | 中文字幕在线免费观看电影 | japanese hot milf free av| wwwxxx国产| 日本xxxx色视频在线观看免费, | 91av久久 | 亚洲小视频网站 | 中国hdxxxx护士爽在线观看 | 久久久中 | 亚洲精品午夜电影 | 天堂二区| 午夜精品久久久久久久96蜜桃 | 成人在线观看一区 | 日本韩国欧美一级片 | 日本成年免费网站 | wankzhd| 中国av免费在线观看 | 羞羞网站视频 | 日本在线国产 |