正則表達式在iOS中的運用

1.什麼是正則表達式

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

2.語法

  首先,特殊符號’^'和’$'。他們的做用是分別指出一個字符串的開始和結束。eg:app

  「^one」:表示全部以」one」開始的字符串(」one cat」,」one123″,·····);編碼

  相似於:- (BOOL)hasPrefix:(NSString *)aString;lua

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

  相似於:- (BOOL)hasSuffix:(NSString *)aString;spa

  「^apple$」:表示開始和結尾都是」apple」的字符串,這個是惟一的~;3d

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

  相似於 iOS8的新方法- (BOOL)containsString:(NSString *)aString,搜索子串用的。ip

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

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

  「ab+」:表示一個字符串有一個a後面跟着至少一個b或者更多( 」ab」, 「abbb」,……);

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

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

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

  「ab{4}」:表示一個字符串有一個a跟着4個b(」abbbb」);

  「ab{1,}」:表示一個字符串有一個a跟着至少1個b(」ab」,」abb」,」abbb」,……);

  「ab{3,4}」:表示一個字符串有一個a跟着3到4個b(」abbb」,」abbbb」)。

  那麼,「*」能夠用{0,}表示,「+」能夠用{1,}表示,「?」能夠用{0,1}表示

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

  「 | 」表示「或」操做:

  「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」後面跟着一個任意字符和一個小寫字母;

  「^.{5}$」:表示任意1個長度爲5的字符串;

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

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

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

  」 0\{3,\} 」 表示數字爲至少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\+$」

3.正則表達式在iOS中的簡單應用

/** 正則匹配手機號 */

+ (BOOL)checkTelNumber:(NSString *) telNumber;

+ (BOOL)checkTelNumber:(NSString *) telNumber

{

    NSString *pattern = @"^1+[3578]+\\d{9}";

    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];

    BOOL isMatch = [pred evaluateWithObject:telNumber];

    if (telNumber.length != 11) {

        return NO;

    }

    return isMatch;

} 

/** 正則匹配用戶密碼6-18位數字和字母組合 */

+ (BOOL)checkPassword:(NSString *) password;

+ (BOOL)checkPassword:(NSString *) password

{

    NSString *pattern = @"^(?![0-9]+$)(?![a-zA-Z]+$)[a-zA-Z0-9]{6,18}";

    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];

    BOOL isMatch = [pred evaluateWithObject:password];

    return isMatch;

    

}

/** 正則匹配用戶姓名,20位的中文或英文 */

+ (BOOL)checkUserName : (NSString *) userName;

+ (BOOL)checkUserName : (NSString *) userName

{

    NSString *pattern = @"^[a-zA-Z\u4E00-\u9FA5]{1,20}";

    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];

    BOOL isMatch = [pred evaluateWithObject:userName];

    return isMatch;

    

}

/** 正則匹配用戶身份證號 */

+ (BOOL)checkUserIdCard: (NSString *) idCard;

+ (BOOL)checkUserIdCard: (NSString *) idCard

{

    NSString *pattern = @"(^[0-9]{15}$)|([0-9]{17}([0-9]|X)$)";

    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];

    BOOL isMatch = [pred evaluateWithObject:idCard];

    return isMatch;

}

/** 正則匹配URL */

+ (BOOL)checkURL : (NSString *) url;

+ (BOOL)checkURL : (NSString *) url

{

    NSString *pattern = @"^[0-9A-Za-z]{1,50}";

    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];

    BOOL isMatch = [pred evaluateWithObject:url];

    return isMatch;

}

4.經常使用的正則表達式

  (1)驗證電話號碼:(」^(\\d{3,4}-)\\d{7,8}$」)

  (2)驗證Email地址:(「^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\.\\w+([-.]\\w+)*$」);

  (3)整數或者小數:^[0-9]+([.]{0,1}[0-9]+){0,1}$

  (4)只能輸入數字:」^[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}日?  注:可用來匹配大多數年月日信息。

  (11)匹配空白行的正則表達式:\n\s*\r   注:能夠用來刪除空白行

  (12)匹配賬號是否合法(字母開頭,容許5-16字節,容許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 注:表單驗證時很實用

  (13)匹配騰訊QQ號:[1-9][0-9]\{4,\}  注:騰訊QQ號從10 000 開始

  (14)匹配中國郵政編碼:[1-9]\\d{5}(?!\d) 注:中國郵政編碼爲6位數字

  (15)匹配ip地址:((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)。

相關文章
相關標籤/搜索