iOS 常用的正規表示式和謂詞的配合使用

2021-06-28 16:16:20 字數 4572 閱讀 6550

ios開發

regex

[objc]view plain

copy

ios 中可以通過 nspredicate 來處理正規表示式。相關資料如下:

icu 正規表示式規則:

在 ios 中,我們使用 nspredicate 的字串比較功能來進行正規表示式處理,其比較關鍵字為:matches

下面,列舉乙個匹配6-15個由字母/數字組成的字串的正規表示式,來看看 nspredicate 的具體使用:

[cpp]view plain

copy

print?

nsstring * regex        = @

"(^[a-za-z0-9]$)"

;  nspredicate * pred      = [nspredicate predicatewithformat:@"self matches %@"

, regex]; 

bool

ismatch            = [pred evaluatewithobject:@

"123456abcde"

]; 

下面是一些常用的正規表示式

//郵箱

+ (bool

)validateemail

:(nsstring

*)email 

"; 

nspredicate

*emailtest = [nspredicate

predicatewithformat

:@"self matches %@"

,emailregex

]; 

return

[emailtest

evaluatewithobject

:email]; 

}  //手機號碼驗證

+ (bool

)validatemobile

:(nsstring

*)mobile 

$"; 

nspredicate

*phonetest = [nspredicate

predicatewithformat

:@"self matches %@"

,phoneregex]; 

return

[phonetest

evaluatewithobject

:mobile]; 

}  //車牌號驗證

+ (bool

)validatecarno

:(nsstring

*)carno 

[a-za-z][a-za-z_0-9][a-za-z_0-9_\u4e00-\u9fa5]$"

;  nspredicate

*cartest = [nspredicate

predicatewithformat

:@"self matches %@"

,carregex]; 

nslog(@"cartest is %@"

,cartest); 

return

[cartest

evaluatewithobject

:carno]; 

}  //車型

+ (bool

)validatecartype

:(nsstring

*)cartype 

//使用者名稱

+ (bool

)validateusername

:(nsstring

*)name 

+$"; 

nspredicate

*usernamepredicate = [nspredicate

predicatewithformat

:@"self matches %@"

,usernameregex]; 

bool

b = [usernamepredicate

evaluatewithobject

:name]; 

return

b; 

}  //密碼

+ (bool

)validatepassword

:(nsstring

*)password 

+$"; 

nspredicate

*passwordpredicate = [nspredicate

predicatewithformat

:@"self matches %@"

,passwordregex]; 

return

[passwordpredicate

evaluatewithobject

:password]; 

}  //暱稱

+ (bool

)validatenickname

:(nsstring

*)nickname 

$"; 

nspredicate

*passwordpredicate = [nspredicate

predicatewithformat

:@"self matches %@"

,nicknameregex]; 

return

[passwordpredicate

evaluatewithobject

:nickname]; 

}  //身份證號

+ (bool

)validateidentitycard

: (nsstring

*)identitycard 

nsstring

*regex2=

@"^(\\d|\\d)(\\d|[xx])$"

;  nspredicate

*identitycardpredicate = [nspredicate

predicatewithformat

:@"self matches %@"

,regex

2]; 

return

[identitycardpredicate

evaluatewithobject

:identitycard]; 

其實ios中有三種方式來實現正規表示式的匹配。現在將他們都記錄在這裡:

1.利用nspredicate(謂詞)匹配

nsstring *email = @「[email protected]」;

nsstring*regex = @"[a-z0-9a-z._%+-]+@[a-za-z0-9.-]+\\.[a-za-z]";

nspredicate *predicate = [nspredicate predicatewithformat:@"self matches %@", regex];

bool isvalid = [predicate evaluatewithobject:email];

謂詞匹配比較靈活,但是需要有謂詞的相關知識。

2.利用rangeofstring:option:直接查詢

nsstring *searchtext = @"// do any additional setup after loading the view, typically from a nib.";

nsrange range = [searchtext rangeofstring:@"(?:[^,])*\\." options:nsregularexpressionsearch];

if (range.location != nsnotfound)

options中設定nsregularexpressionsearch就是表示利用正規表示式匹配,會返回第乙個匹配結果的位置。

3.使用正規表示式類

nsstring *searchtext = @"// do any additional setup after loading the view, typically from a nib.";   

nserror *error = null;

nsregularexpression *regex = [nsregularexpression regularexpressionwithpattern:@"(?:[^,])*\\." options:nsregularexpressioncaseinsensitive error:&error];

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

if (result)

使用系統的正規表示式類(nsregularexpression)會返回匹配的多個結果。

小結:第一種匹配需要學習nspredicate的寫法,需要查閱蘋果相關技術文件;如果只關心第乙個匹配的結果,第二種匹配較為簡潔;如果需要匹配多個結果,同時匹配多次,第三種方式效率會更高。

iOS 正規表示式與謂詞

一 基本概念1.什麼是正規表示式 正規表示式,又稱正規表示法,是對字串操作的一種邏輯公式。正規表示式可以檢測 給定的字串是否符合我們定義的邏輯,也可以從字串中獲取我們想要的特定部分。它可以 迅速地用極簡單的方式達到字串的複雜控制。2.什麼是謂詞 cocoa框架中的nspredicate用於查詢,原理...

IOS常用正規表示式

原文 匹配中文 u4e00 u9fa5 英文本母 a za z 數字 0 9 匹配中文,英文本母和數字及 u4e00 u9fa5 a za z0 9 同時判斷輸入長度 u4e00 u9fa5 a za z0 9 w u4e00 u9fa5 uf900 ufa2d 1 乙個正規表示式,只含有漢字 數字...

iOS中常用的正規表示式

在編寫處理字串的程式或網頁時,經常會有查詢符合某些複雜規則的字串的需要。正規表示式就是用於描述這些規則的工具。換句話說,正規表示式就是記錄文字規則的 很可能你使用過windows dos下用於檔案查詢的萬用字元 wildcard 也就是 和?如果你想查詢某個目錄下的所有的word文件的話,你會搜尋 ...