iOS正規表示式的應用

2021-07-14 10:38:24 字數 4657 閱讀 5037

正規表示式,又稱正規表示法,是對字串操作的一種邏輯公式。正規表示式可以檢測給定的字串是否符合我們定義的邏輯,也可以從字串中獲取我們想要的特定部分。它可以迅速地用極簡單的方式達到字串的複雜控制。

看乙個過濾純數字的例子

- (bool)validatenumber:(nsstring *) textstring

@"^[0-9]+$"即為乙個正規表示式。

它代表了字串中只能包含》=1個0-9的數字,語法是不是有一些怪異?

下面我們先撇開ios中的正規表示式的語法,用通俗的正規表示式語法來為介紹一下。(ios語法與通俗的正規表示式語法相同,不同在於對轉義字元的處理上(語言類的都相同))

語法:首先,特殊符號』^'和』$'。他們的作用是分別指出乙個字串的開始和結束。eg:

「^one」:表示所有以」one」開始的字串(」one cat」,」one123″,·····);

類似於:- (bool)hasprefix:(nsstring *)astring;

「a dog$」:表示所以以」a dog」結尾的字串(」it is a dog」,·····);

類似於:- (bool)hassuffix:(nsstring *)astring;

「banana」:表示任何包含」banana」的字串。

類似於 ios8的新方法- (bool)containsstring:(nsstring *)astring,搜尋子串用的。

『*』,』+'和』?'這三個符號,表示乙個或n個字元重複出現的次數。它們分別表示「沒有或更多」([0,+∞]取整),「一次或更多」([1,+∞]取整),「沒有或一次」([0,1]取整)。下面是幾個例子:

「ab*」:表示乙個字串有乙個a後面跟著零個或若干個b(」a」, 「ab」, 「abbb」,……);

「ab?」:表示乙個字串有乙個a後面跟著零個或者乙個b( 」a」, 「ab」);

「a?b+$」:表示在字串的末尾有零個或乙個a跟著乙個或幾個b( 」b」, 「ab」,」bb」,」abb」,……)。

可以用大括號括起來({}),表示乙個重複的具體範圍。例如

「ab」:表示乙個字串有乙個a跟著4個b(」abbbb」);

「ab」:表示乙個字串有乙個a跟著至少1個b(」ab」,」abb」,」abbb」,……);

「ab」:表示乙個字串有乙個a跟著3到4個b(」abbb」,」abbbb」)。

那麼,「*」可以用表示,「+」可以用表示,「?」可以用表示

注意:可以沒有下限,但是不能沒有上限!例如「ab」是錯誤的寫法

「 | 」表示「或」操作:

「a|b」:表示乙個字串裡有」a」或者」b」;

「(a|bcd)ef」:表示」aef」或」bcdef」;

「(a|b)*c」:表示一串」a」"b」混合的字串後面跟乙個」c」;

方括號」[ ]「表示在括號內的眾多字元中,選擇1-n個括號內的符合語法的字元作為結果,例如

「[ab]「:表示乙個字串有乙個」a」或」b」(相當於」a|b」);

「[a-d]「:表示乙個字串包含小寫的』a'到』d'中的乙個(相當於」a|b|c|d」或者」[abcd]「);

「^[a-za-z]「:表示乙個以字母開頭的字串;

「[0-9]a」:表示a前有一位的數字;

「[a-za-z0-9]$」:表示乙個字串以乙個字母或數字結束。

「.」匹配除「\r\n」之外的任何單個字元:

「a.[a-z]「:表示乙個字串有乙個」a」後面跟著乙個任意字元和乙個小寫字母;

「^.$」:表示任意1個長度為5的字串;

「\num」 其中num是乙個正整數。表示」\num」之前的字元出現相同的個數,例如

「(.)\1″:表示兩個連續的相同字元。

「10\」 : 表示數字1後面跟著1或者2個0 (「10″,」100″)。

」 0\ 」 表示數字為至少3個連續的0 (「000」,「0000」,······)。

在方括號裡用』^'表示不希望出現的字元,』^'應在方括號裡的第一位。

「@[^a-za-z]4@」表示兩個」@」中不應該出現字母)。

常用的還有:

「 \d 」匹配乙個數字字元。等價於[0-9]。

「 \d」匹配乙個非數字字元。等價於[^0-9]。

「 \w 」匹配包括下劃線的任何單詞字元。等價於「[a-za-z0-9_]」。

「 \w 」匹配任何非單詞字元。等價於「[^a-za-z0-9_]」。

ios中書寫正規表示式,碰到轉義字元,多加乙個「\」,例如:

全數字字元:@」^\\d\+$」

1.正規表示式與nspredicate連用,eg:

- (bool)validatenumber:(nsstring *) textstring

2.nsstring方法

- (nsrange)rangeofstring:(nsstring *)astring options:(nsstringcompareoptions)mask;

nsstring *searchtext = @"rangeofstring";

nsrange range = [searchtext rangeofstring:@"^[0-9]+$" options:nsregularexpressionsearch];

if (range.location != nsnotfound)

3.正規表示式類(nsregularexpression)

nsstring *searchtext = @"you want to match";    

nserror *error = null;

nsregularexpression *regex = [nsregularexpression regularexpressionwithpattern:@"^[0-9]+$" options:nsregularexpressioncaseinsensitive error:&error];

nstextcheckingresult *result = [regex firstmatchinstring:searchtext options:0 range:nsmakerange(0, [searchtext length])];

if (result)

1.驗證使用者名稱和密碼:」^[a-za-z]\w$」

2.驗證**號碼:(」^(\\d-)\\d$」)

eg:021-68686868  0511-6868686;

3.驗證手機號碼:」^1[3|4|5|7|8][0-9]\\d$」;

4.驗證身份證號(15位或18位數字):」\\d[[0-9],0-9xx]」;

6.只能輸入由數字和26個英文本母組成的字串:(「^[a-za-z0-9]+$」) ;

7.整數或者小數:^[0-9]+([.][0-9]+)$

8.只能輸入數字:」^[0-9]*$」。

9.只能輸入n位的數字:」^\\d$」。

10.只能輸入至少n位的數字:」^\\d$」。

11.只能輸入m~n位的數字:」^\\d$」。

12.只能輸入零和非零開頭的數字:」^(0|[1-9][0-9]*)$」。

13.只能輸入有兩位小數的正實數:」^[0-9]+(.[0-9])?$」。

14.只能輸入有1~3位小數的正實數:」^[0-9]+(\.[0-9])?$」。

15.只能輸入非零的正整數:」^\+?[1-9][0-9]*$」。

16.只能輸入非零的負整數:」^\-[1-9]0-9″*$。

17.只能輸入長度為3的字元:」^.$」。

18.只能輸入由26個英文本母組成的字串:」^[a-za-z]+$」。

19.只能輸入由26個大寫英文本母組成的字串:」^[a-z]+$」。

20.只能輸入由26個小寫英文本母組成的字串:」^[a-z]+$」。

21.驗證是否含有^%&』,;=?$\」等字元:」[^%&',;=?$\x22]+」。

22.只能輸入漢字:」^[\u4e00-\u9fa5]$」。

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[年|\-|\.]\\d[月|\-|\.]\\d日?

評注:可用來匹配大多數年月日資訊。

27.匹配雙位元組字元(包括漢字在內):[^\x00-\xff]

評注:可以用來計算字串的長度(乙個雙位元組字元長度計2,ascii字元計1)

28.匹配空白行的正規表示式:\n\s*\r

評注:可以用來刪除空白行

29.匹配html標記的正規表示式:<(\s*?)[^>]*>.*?|<.*? />

評注:網上流傳的版本太糟糕,上面這個也僅僅能匹配部分,對於複雜的巢狀標記依舊無能為力

30.匹配首尾空白字元的正規表示式:^\s*|\s*$

評注:可以用來刪除行首行尾的空白字元(包括空格、製表符、換頁符等等),非常有用的表示式

評注:網上流傳的版本功能很有限,上面這個基本可以滿足需求

32.匹配帳號是否合法(字母開頭,允許5-16位元組,允許字母數字下劃線):^[a-za-z][a-za-z0-9_]$

評注:表單驗證時很實用

iOS開發 正規表示式的應用

判斷手機號是否合法 bool isphonenumber nsstring phonenum 10 中國移動 china mobile 11 134 0 8 135,136,137,138,139,150,151,157,158,159,182,187,188 12 nsstring cm 1 34...

iOS 正規表示式

正規表示式,又稱正規表示法 常規表示法 英語 regular expression,在 中常簡寫為regex regexp或re 電腦科學的乙個概念。正規表示式使用單個字串來描述 匹配一系列符合某個句法規則的字串。在很多文字編輯器裡,正規表示式通常被用來檢索 替換那些符合某個模式的文字。系統自帶的,...

ios 正規表示式

ab7 必須找到連在一起的ab7 0 9 找到0 9中的乙個即可 0 9 找到0 9中的乙個即可 0123456789 找到0 9中的乙個即可 d表示數字,d表示3個數字連在一起 d d d表示3個數字連在一起 da表示3個數字2個a連在一起 d 2個或4個數字連在一起 表示開始 表示結束 d 開始...