1. 程式人生 > >iOS:詳細的正則表達式

iOS:詳細的正則表達式

bject for one 常用 一個 .cn 想要 bbb 公式

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,}表示,“?”可以用{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][email protected]”表示兩個”@”中不應該出現字母)。
常用的還有:
“ \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._%+-][email protected][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‘

技術分享

iOS:詳細的正則表達式