iOS 中對NSString的常用判斷

在iOS開發(fā)中议纯,經(jīng)常有用到對輸入的字符串進(jìn)行判斷∈眉蓿總結(jié)如下意鲸。

(1)有效的電話號碼

- (BOOL) isValidMobileNumber {
    NSString* const MOBILE = @"^1(3|4|5|7|8)\\d{9}$";
    NSPredicate* predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBILE];
    return [predicate evaluateWithObject:self];
}

(2)有效的驗證碼(根據(jù)自家的驗證碼位數(shù)進(jìn)行修改)

- (BOOL) isValidVerifyCode{
    NSString *pattern = @"^[0-9]{4}";
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];
    return [predicate evaluateWithObject:self];
}

(3)有效的真實姓名

- (BOOL) isValidRealName{
    NSString *nicknameRegex = @"^[\u4e00-\u9fa5]{2,8}$";
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",nicknameRegex];
    return [predicate evaluateWithObject:self];
}

(4)是否只有中文

- (BOOL) isOnlyChinese{
    NSString * chineseTest=@"^[\u4e00-\u9fa5]{0,}$";
    NSPredicate*chinesePredicate=[NSPredicate predicateWithFormat:@"SELF MATCHES %@",chineseTest];
    return [chinesePredicate evaluateWithObject:self];
}

(5)有效的銀行卡號

- (BOOL) isValidBankCardNumber {
    NSString* const BANKCARD = @"^(\\d{16}|\\d{19})$";
    NSPredicate* predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", BANKCARD];
    return [predicate evaluateWithObject:self];
}

(6)有效的郵箱

- (BOOL) isValidEmail{
    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:self];
}

(7)昵稱驗證

- (BOOL) validateNickName{
    NSString *userNameRegex = @"^[A-Za-z0-9\u4e00-\u9fa5]{1,24}+$";
    NSPredicate *userNamePredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",userNameRegex];
    return [userNamePredicate evaluateWithObject:self];
}

(8)有效的字母數(shù)字密碼

- (BOOL) isValidAlphaNumberPassword{
    NSString *regex = @"^(?!\\d+$|[a-zA-Z]+$)\\w{6,12}$";
    NSPredicate *identityCardPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
    return [identityCardPredicate evaluateWithObject:self];
}

(9)檢測有效身份證 (15位)

- (BOOL) isValidIdentifyFifteen{
    NSString * identifyTest=@"^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$";
    NSPredicate*identifyPredicate=[NSPredicate predicateWithFormat:@"SELF MATCHES %@",identifyTest];
    return [identifyPredicate evaluateWithObject:self];
}

(10)檢測有效身份證(18位)

- (BOOL) isValidIdentifyEighteen{
    NSString * identifyTest=@"^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)$";
    NSPredicate*identifyPredicate=[NSPredicate predicateWithFormat:@"SELF MATCHES %@",identifyTest];
    return [identifyPredicate evaluateWithObject:self];
}

(11)限制只能輸入數(shù)字

- (BOOL) isOnlyNumber{
    BOOL res = YES;
    NSCharacterSet* tmpSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
    int i = 0;
    while (i < self.length) {
        NSString * string = [self substringWithRange:NSMakeRange(i, 1)];
        NSRange range = [string rangeOfCharacterFromSet:tmpSet];
        if (range.length == 0) {
            res = NO;
            break;
        }
        i++;
    }
    return res;
}

(19)限制只能輸入數(shù)字和小數(shù)點且小數(shù)點后保留兩位

- (BOOL) isOnlyNumberCashRange:(NSRange)range{
    NSString * cash= (NSString*)self;
    NSScanner      *scanner    = [NSScanner scannerWithString:cash];
    NSCharacterSet *numbers;
    NSRange         pointRange = [self rangeOfString:@"."];
    if ( (pointRange.length > 0) && (pointRange.location < range.location  || pointRange.location > range.location + range.length) )
    {
        numbers = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
    }
    else
    {
        numbers = [NSCharacterSet characterSetWithCharactersInString:@"0123456789."];
    }
    
    if ( [self isEqualToString:@""] && [cash isEqualToString:@"."] )
    {
        return NO;
    }
    if (range.location == 1) {
        if ([cash isEqualToString:@"."]) {
            return NO;
        }
    }
    short remain = 2; //默認(rèn)保留2位小數(shù)
    
    NSString *tempStr = [self stringByAppendingString:cash];
    NSUInteger strlen = [tempStr length];
    if(pointRange.length > 0 && pointRange.location > 0){ //判斷輸入框內(nèi)是否含有“.”。
        if([cash isEqualToString:@"."]){ //當(dāng)輸入框內(nèi)已經(jīng)含有“.”時算色,如果再輸入“.”則被視為無效。
            return NO;
        }
        if(strlen > 0 && (strlen - pointRange.location) > remain+1){ //當(dāng)輸入框內(nèi)已經(jīng)含有“.”螟够,當(dāng)字符串長度減去小數(shù)點前面的字符串長度大于需要要保留的小數(shù)點位數(shù)灾梦,則視當(dāng)次輸入無效。
            return NO;
        }
    }else{
        if (range.location>4) {
            if (![cash isEqualToString:@"."]) {
                return NO;
            }
        }
    }
    NSRange zeroRange = [self rangeOfString:@"0"];
    if(zeroRange.length == 1 && zeroRange.location == 0){ //判斷輸入框第一個字符是否為“0”
        if(![cash isEqualToString:@"0"] && ![cash isEqualToString:@"."] && [self length] == 1)
        { //當(dāng)輸入框只有一個字符并且字符為“0”時妓笙,再輸入不為“0”或者“.”的字符時若河,則將此輸入替換輸入框的這唯一字符。
            return NO;
        }
        else
        {
            if(pointRange.length == 0 && pointRange.location > 0){ //當(dāng)輸入框第一個字符為“0”時寞宫,并且沒有“.”字符時萧福,如果當(dāng)此輸入的字符為“0”,則視當(dāng)此輸入無效辈赋。
                if([cash isEqualToString:@"0"]){
                    return NO;
                }
            }
        }
    }
    
    NSString *buffer;
    if ( ![scanner scanCharactersFromSet:numbers intoString:&buffer] && ([cash length] != 0) )
    {
        return NO;
    }
    return YES;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鲫忍,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子钥屈,更是在濱河造成了極大的恐慌悟民,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件篷就,死亡現(xiàn)場離奇詭異射亏,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)竭业,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進(jìn)店門智润,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人未辆,你說我怎么就攤上這事窟绷。” “怎么了鼎姐?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵钾麸,是天一觀的道長更振。 經(jīng)常有香客問我,道長饭尝,這世上最難降的妖魔是什么肯腕? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮钥平,結(jié)果婚禮上实撒,老公的妹妹穿的比我還像新娘。我一直安慰自己涉瘾,他們只是感情好知态,可當(dāng)我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著立叛,像睡著了一般负敏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上秘蛇,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天其做,我揣著相機(jī)與錄音,去河邊找鬼赁还。 笑死妖泄,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的艘策。 我是一名探鬼主播蹈胡,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼朋蔫!你這毒婦竟也來了罚渐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤斑举,失蹤者是張志新(化名)和其女友劉穎搅轿,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體富玷,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡璧坟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了赎懦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片雀鹃。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖励两,靈堂內(nèi)的尸體忽然破棺而出黎茎,到底是詐尸還是另有隱情,我是刑警寧澤当悔,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布傅瞻,位于F島的核電站踢代,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏嗅骄。R本人自食惡果不足惜胳挎,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望溺森。 院中可真熱鬧慕爬,春花似錦、人聲如沸屏积。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽炊林。三九已至姥卢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間铛铁,已是汗流浹背隔显。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留饵逐,地道東北人。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓彪标,卻偏偏與公主長得像倍权,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子捞烟,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理薄声,服務(wù)發(fā)現(xiàn),斷路器题画,智...
    卡卡羅2017閱讀 134,704評論 18 139
  • 一默辨、文本框為字符型 必填項非空校驗: 1、必填項未輸入--程序應(yīng)提示錯誤苍息; 2缩幸、必填項只輸入若干個空格,未輸入其它...
    許小小晴閱讀 4,631評論 0 2
  • 文章轉(zhuǎn)載地址: http://www.open-open.com/code/view/1430625516632 ...
    得起一個清新脫俗的名字閱讀 2,176評論 1 3
  • 背離現(xiàn)象普遍存在于社會的方方面面竞思,各個角落表谊。難以克制。 生活的盖喷,經(jīng)濟(jì)的爆办。 但應(yīng)該是短期的,越是持續(xù)時間拉長课梳,造成的...
    安南美閱讀 284評論 0 0
  • 加密類 在.net 4.5版本下距辆,使用System.Web.Security.FormsAuthenticatio...
    faith3729閱讀 4,867評論 1 0