iOS開(kāi)發(fā)常用方法(正則匹配)

寫(xiě)在前面

正則表達(dá)式常見(jiàn)字符

  test                   # 匹配包含test的字符串
  .                      # 匹配除換行符外任意字符
  \                      # 轉(zhuǎn)義字符 
  [abc]或[a-c]           # 匹配字符類(lèi),如例子匹配a,b,c中的任何一個(gè) 
  [^abc]                 # 匹配除了a,b,c以外的所有字符

正則表達(dá)式特殊字符

  \d                  # 數(shù)字,等同于[0-9]
  \D                  # 非數(shù)字
  \s                  # 空白字符(包括換行、Tab等)
  \S                  # 非空白字符
  \w                  # 單詞,等用于[a-zA-Z0-9_]
  \W                  # 非單詞

正則表達(dá)式數(shù)量詞

  c*                  # 匹配字符"c" 0或無(wú)限次
  c+                  # 匹配字符"c" 1次以上
  c?                  # 匹配字符"c" 0或1次
  c{3}                # 匹配字符"c" 3次
  c{3,5}              # 匹配字符"c" 3到5次

正則表達(dá)式邊界匹配

  ^abc                # 匹配"abc"開(kāi)頭的字符串
  abc$                # 匹配"abc"結(jié)尾的字符串

iOS中的NSRegularExpression這個(gè)類(lèi)

郵箱校驗(yàn)

+ (BOOL)validateUserEmail:(NSString *)str {
   NSString *email = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
   NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
   return [emailTest evaluateWithObject:str];
}

手機(jī)號(hào)校驗(yàn)

+  (BOOL)validateMobile:(NSString *)mobile {
    //手機(jī)號(hào)以13、15、18開(kāi)頭,八個(gè)\d數(shù)字字符
    NSString *phone = @"^((13[0-9])|(15[^4,\\D])|(18[0,0-9]))\\d{8}$";
    NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",phoneRegex];
    return [phoneTest evaluateWithObject:mobile];
}

身份證校驗(yàn)

+  (BOOL)validateIdentityStringValid:(NSString *)identityString {    
    if (identityString.length != 18)
        return NO;
    // 正則表達(dá)式判斷基本 身份證號(hào)是否滿足格式
    NSString *regex2 = @"^(^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$)|(^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])((\\d{4})|\\d{3}[Xx])$)$";
    NSPredicate *identityStringPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex2];
    //如果通過(guò)該驗(yàn)證,說(shuō)明身份證格式正確,但準(zhǔn)確性還需計(jì)算
    if (![identityStringPredicate evaluateWithObject:identityString])
    return NO;

    //** 開(kāi)始進(jìn)行校驗(yàn) *//

    //將前17位加權(quán)因子保存在數(shù)組里
    NSArray *idCardWiArray = @[@"7", @"9", @"10", @"5", @"8", @"4", @"2", @"1", @"6", @"3", @"7", @"9", @"10", @"5", @"8", @"4", @"2"];

    //這是除以11后,可能產(chǎn)生的11位余數(shù)、驗(yàn)證碼,也保存成數(shù)組
    NSArray *idCardYArray = @[@"1", @"0", @"10", @"9", @"8", @"7", @"6", @"5", @"4", @"3", @"2"];

    //用來(lái)保存前17位各自乖以加權(quán)因子后的總和
    NSInteger idCardWiSum = 0;
    for(int i = 0; i < 17; i++) {
        NSInteger subStrIndex = [[identityString substringWithRange:NSMakeRange(i, 1)] integerValue];
        NSInteger idCardWiIndex = [[idCardWiArray objectAtIndex:i] integerValue];
        idCardWiSum+= subStrIndex * idCardWiIndex;
    }

    //計(jì)算出校驗(yàn)碼所在數(shù)組的位置
    NSInteger idCardMod=idCardWiSum%11;
    //得到最后一位身份證號(hào)碼
     NSString *idCardLast= [identityString substringWithRange:NSMakeRange(17, 1)];
   //如果等于2,則說(shuō)明校驗(yàn)碼是10,身份證號(hào)碼最后一位應(yīng)該是X
    if (idCardMod==2) {
          if (![idCardLast isEqualToString:@"X"]||[idCardLast isEqualToString:@"x"]) {
            return NO;
         }
    } else {
      //用計(jì)算出的驗(yàn)證碼與最后一位身份證號(hào)碼匹配,如果一致,說(shuō)明通過(guò),否則是無(wú)效的身份證號(hào)碼
          if (![idCardLast isEqualToString: [idCardYArray ob  jectAtIndex:idCardMod]]) {
              return NO;
           }
     }
     return YES;
}

是否含有非法字符(文字、字母、數(shù)字除外)

+ (BOOL)validateSpecialCharacters:(NSString *)string {
    NSString *regex = @"^[A-Za-z0-9\\u4e00-\u9fa5]+$";
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
    if(![pred evaluateWithObject:string]) {
        return YES
    }
   return NO;
}

URL校驗(yàn)

+ (BOOL)validateURL:(NSString *)url {
  NSString *pattern = @"^[0-9A-Za-z]{1,50}";
  NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];
  BOOL isMatch = [pred evaluateWithObject:url];
  return isMatch;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • iOS中使用正則表達(dá)式就不得不提NSRegularExpression,所以我們需要先搞清楚什么是NSRegula...
    sunmumu1222閱讀 2,480評(píng)論 0 4
  • 正則表達(dá)式描述的是一種規(guī)則,符合這種限定規(guī)則的字符串我們認(rèn)為它某種滿足條件的,是我們所需的。在正則表達(dá)式中,主要有...
    Single_YAM閱讀 791評(píng)論 0 4
  • 初衷:看了很多視頻、文章,最后卻通通忘記了,別人的知識(shí)依舊是別人的,自己卻什么都沒(méi)獲得。此系列文章旨在加深自己的印...
    DCbryant閱讀 4,257評(píng)論 0 20
  • 她看見(jiàn)一座山,她慢慢走過(guò)去。她要爬山,她已經(jīng)離開(kāi)家很久了。從夏天她就離家出走,現(xiàn)在已經(jīng)是秋天。 天漸漸涼了,她帶出...
    麥子的麥浪閱讀 438評(píng)論 2 0
  • 以前還是有寫(xiě)日記的習(xí)慣,但是堅(jiān)持不了天天寫(xiě),但也會(huì)偶爾寫(xiě)一篇,好像結(jié)婚后就沒(méi)怎么寫(xiě)過(guò),網(wǎng)上買(mǎi)過(guò)一本記錄懷...
    _不負(fù)好時(shí)光_閱讀 381評(píng)論 0 0

友情鏈接更多精彩內(nèi)容