iOS:詳細的正則表達式


1、簡介:

    在項目中,正則的使用是很普遍的,例如登錄賬號和密碼(手機號、郵箱等)。用到的方法就是謂詞對象過濾:NSPredicate。

 

2、什么是正則表達式:

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

 

3、語法:

首先,特殊符號'^''$'。他們的作用是分別指出一個字符串的開始和結束。eg: “^one”:表示所有以”one”開始的字符串(”one cat”,”one123″,·····); 類似於:- (BOOL)hasPrefix:(NSString *)aString; “a dog$”:表示所以以”a dog”結尾的字符串(”it is a dog”,·····); 類似於:- (BOOL)hasSuffix:(NSString *)aString; “^apple$”:表示開始和結尾都是”apple”的字符串,這個是唯一的~; “banana”:表示任何包含”banana”的字符串。 類似於 iOS8的新方法- (BOOL)containsString:(NSString *)aString,搜索子串用的。 ‘*''+''?'這三個符號,表示一個或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,}表示,“?”可以用{01}表示 注意:可以沒有下限,但是不能沒有上限!例如“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\+$”

 

4、常用的正則表達式如下:(郵箱,電話號碼,身份證,密碼,昵稱

//郵箱
+ (BOOL) validateEmail:(NSString *)email
{
    NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
    return [emailTest evaluateWithObject:email];
}
  
  
//手機號碼驗證
+ (BOOL) validateMobile:(NSString *)mobile
{
    //手機號以13, 15,18開頭,八個 \d 數字字符
    NSString *phoneRegex = @"^((13[0-9])|(15[^4,\\D])|(18[0,0-9]))\\d{8}$";
    NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",phoneRegex];
    return [phoneTest evaluateWithObject:mobile];
}
  
  
//車牌號驗證
+ (BOOL) validateCarNo:(NSString *)carNo
{
    NSString *carRegex = @"^[\u4e00-\u9fa5]{1}[a-zA-Z]{1}[a-zA-Z_0-9]{4}[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
{
    NSString *CarTypeRegex = @"^[\u4E00-\u9FFF]+$";
    NSPredicate *carTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",CarTypeRegex];
    return [carTest evaluateWithObject:CarType];
}
  
  
//用戶名
+ (BOOL) validateUserName:(NSString *)name
{
    NSString *userNameRegex = @"^[A-Za-z0-9]{6,20}+$";
    NSPredicate *userNamePredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",userNameRegex];
    BOOL B = [userNamePredicate evaluateWithObject:name];
    return B;
}
  
  
//密碼
+ (BOOL) validatePassword:(NSString *)passWord
{
    NSString *passWordRegex = @"^[a-zA-Z0-9]{6,20}+$";
    NSPredicate *passWordPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",passWordRegex];
    return [passWordPredicate evaluateWithObject:passWord];
}
  
  
//昵稱
+ (BOOL) validateNickname:(NSString *)nickname
{
    NSString *nicknameRegex = @"^[\u4e00-\u9fa5]{4,8}$";
    NSPredicate *passWordPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",nicknameRegex];
    return [passWordPredicate evaluateWithObject:nickname];
}
  
  
//身份證號
+ (BOOL) validateIdentityCard: (NSString *)identityCard
{
    BOOL flag;
    if (identityCard.length <= 0) {
        flag = NO;
        return flag;
    }
    NSString *regex2 = @"^(\\d{14}|\\d{17})(\\d|[xX])$";
    NSPredicate *identityCardPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex2];
    return [identityCardPredicate evaluateWithObject:identityCard];
}

 

4、本人整理了一個正則表達式的類,供大家使用,列舉了常用的正則表達式,當然自己也可以擴充(自定義吧)

github: https://github.com/xiayuanquan/XYQRegexPattern

支持CocoaPods:  pod 'XYQRegexPattern', '~> 2.0.0'


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM