NSString的常用分類

工作中翘狱,為了方便秘案,我們經(jīng)常會(huì)對(duì)一些類進(jìn)行擴(kuò)展,新建一些分類潦匈。阱高。。
以下是我在工作中整理的一套自己的NSString的Category茬缩,分享給大家赤惊,如喜歡,請(qǐng)留言支持以下凰锡。
也歡迎大家持續(xù)補(bǔ)充未舟,我會(huì)整理一下,讓更多的人看到掂为。裕膀。。

  • 正則匹配電話號(hào)碼
-(BOOL)isVAlidPhoneNumber
{
    NSString *regex = @"^(13|15|17|18|14)\\d{9}$";
    NSPredicate * pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];
    BOOL isMatch =[pred evaluateWithObject:self];
    return isMatch;
}
  • 正則匹配郵箱
-(BOOL)isValidEmail
{
    NSString *regex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
    NSPredicate *emailTestPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
    return [emailTestPredicate evaluateWithObject:self];
}
  • 正則匹配URL地址
-(BOOL)isValidUrl
{
    NSString *regex =@"[a-zA-z]+://[^\\s]*";
    NSPredicate *urlTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];
    return [urlTest evaluateWithObject:self];
}
  • 判斷字符串是否以某個(gè)字符串開(kāi)頭
-(BOOL)isBeginsWith:(NSString *)string
{
    return ([self hasPrefix:string]) ? YES : NO;
}
  • 判斷字符串是否以某個(gè)字符串結(jié)尾
-(BOOL)isEndssWith:(NSString *)string
{
    return ([self hasSuffix:string]) ? YES : NO;
}
  • 判斷字符串是否包含某個(gè)字符串
-(BOOL)containsString:(NSString *)subString
{
    return ([self rangeOfString:subString].location == NSNotFound) ? NO : YES;
}
  • 新字符串替換老字符串
-(NSString *)replaceCharcter:(NSString *)olderChar withCharcter:(NSString *)newerChar
{
    return  [self stringByReplacingOccurrencesOfString:olderChar withString:newerChar];
}
  • 截取字符串(字符串都是從第0個(gè)字符開(kāi)始數(shù)的哦~)
-(NSString*)getSubstringFrom:(NSInteger)begin to:(NSInteger)end
{
    NSRange r;
    r.location = begin;
    r.length = end - begin;
    return [self substringWithRange:r];
}
  • 添加字符串
-(NSString *)addString:(NSString *)string
{
    if(!string || string.length == 0)
        return self;
    
    return [self stringByAppendingString:string];
}
  • 從主字符串中移除某個(gè)字符串
-(NSString *)removeSubString:(NSString *)subString
{
    if ([self containsString:subString])
    {
        NSRange range = [self rangeOfString:subString];
        return  [self stringByReplacingCharactersInRange:range withString:@""];
    }
    return self;
}
  • 去掉字符串中的空格
-(NSString *)removeWhiteSpacesFromString
{
    NSString *trimmedString = [self stringByTrimmingCharactersInSet:
                               [NSCharacterSet whitespaceAndNewlineCharacterSet]];
    return trimmedString;
}
  • 判斷字符串是否只包含字母-1
-(BOOL)containsOnlyLetters
{
    NSCharacterSet *letterCharacterset = [[NSCharacterSet letterCharacterSet] invertedSet];
    return ([self rangeOfCharacterFromSet:letterCharacterset].location == NSNotFound);
}
  • 判斷字符串是否只包含字母-2(正則)
-(BOOL)isLetter {
    NSString *regEx = @"^[A-Za-z]+$";
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regEx];
    return [pred evaluateWithObject:self];
}
  • 判斷字符串是否只包含數(shù)字-1
-(BOOL)containsOnlyNumbers
{
    NSCharacterSet *numbersCharacterSet = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet];
    return ([self rangeOfCharacterFromSet:numbersCharacterSet].location == NSNotFound);
}
  • 判斷字符串是否只包含數(shù)字-2(正則)
-(BOOL)isNumbers {
    NSString *regEx = @"^-?\\d+.?\\d?";
    NSPredicate *pred= [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regEx];
    return [pred evaluateWithObject:self];
}
  • 判斷字符串是否只包含數(shù)字和字母
-(BOOL)containsOnlyNumbersAndLetters
{
    NSCharacterSet *numAndLetterCharSet = [[NSCharacterSet alphanumericCharacterSet] invertedSet];
    return ([self rangeOfCharacterFromSet:numAndLetterCharSet].location == NSNotFound);
}
  • 由字母或數(shù)字組成 6-18位密碼字符串(正則)
-(BOOL)isPassword {
    NSString * regex = @"^[A-Za-z0-9_]{6,18}$";
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
    return [pred evaluateWithObject:self];
}
  • 判斷數(shù)組中是否包含某個(gè)字符串
-(BOOL)isInThisarray:(NSArray*)array
{
    for(NSString *string in array) {
        if([self isEqualToString:string]) {
            return YES;
        }
    }
    return NO;
}
  • 字符串轉(zhuǎn)Data
-(NSData *)convertToData
{
    return [self dataUsingEncoding:NSUTF8StringEncoding];
}
  • Data轉(zhuǎn)字符轉(zhuǎn)
+(NSString *)getStringFromData:(NSData *)data
{  return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}
  • 獲取系統(tǒng)版本號(hào)
+(NSString *)getMyApplicationVersion
{
    NSDictionary *info = [[NSBundle mainBundle] infoDictionary];
   
    NSString *shortVersion = [info objectForKey:@"CFBundleShortVersionString"];
    return [NSString stringWithFormat:@"%@", shortVersion];
    
    // NSString *bundleVersion = [info objectForKey:@"CFBundleVersion"];  測(cè)試字段號(hào)
   // NSString *name = [info  objectForKey:@"CFBundleDisplayName"];  app 名字
}
  • 字符串編碼
-(NSString*)EncodingWithUTF8
{
    NSString *urlStrl = [self stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    return urlStrl;
}
  • 獲取當(dāng)前時(shí)間
+(NSString*)getCurrentTimeString
{
    //獲取系統(tǒng)當(dāng)前時(shí)間
    NSDate *currentDate = [NSDate date];
    //用于格式化NSDate對(duì)象
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    //設(shè)置格式:zzz表示時(shí)區(qū)
    [dateFormatter setDateFormat:@"HH:mm:ss"];
    //NSDate轉(zhuǎn)NSString
    NSString *currentDateString = [dateFormatter stringFromDate:currentDate];
    //輸出currentDateString
    return currentDateString;
}
  • 通知字符串長(zhǎng)度 (文字 2個(gè)字節(jié) 字母:1個(gè)字節(jié))
// 統(tǒng)計(jì)ASCII和Unicode混合文本長(zhǎng)度
-(NSUInteger) unicodeLengthOfString {
    NSUInteger asciiLength = 0;
    for (NSUInteger i = 0; i < self.length; i++) {
        unichar uc = [self characterAtIndex: i];
        asciiLength += isascii(uc) ? 1 : 2;
    }
    NSUInteger unicodeLength = asciiLength / 2;
    if(asciiLength % 2) {
        unicodeLength++;
    }
    return unicodeLength;
}
  • 計(jì)算屬性字符文本占用的寬高
/**
 *  計(jì)算屬性字符文本占用的寬高
 *  @param font    顯示的字體
 *  @param maxSize 最大的顯示范圍
 *  @param lineSpacing 行間距
 *  @return 占用的寬高
 */
-(CGSize)attrStrSizeWithFont:(UIFont *)font andmaxSize:(CGSize)maxSize lineSpacing:(CGFloat)lineSpacing{
    
    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
    [paragraphStyle setLineSpacing:lineSpacing];
    NSDictionary *dict = @{NSFontAttributeName: font,
                           NSParagraphStyleAttributeName: paragraphStyle};
    CGSize sizeToFit = [self boundingRectWithSize:maxSize // 用于計(jì)算文本繪制時(shí)占據(jù)的矩形塊
    options:NSStringDrawingTruncatesLastVisibleLine |NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading // 文本繪制時(shí)的附加選項(xiàng)
    attributes:dict        // 文字的屬性
    context:nil].size; // context上下文菩掏。包括一些信息魂角,例如如何調(diào)整字間距以及縮放。該對(duì)象包含的信息將用于文本繪制智绸。該參數(shù)可為nil
    return sizeToFit;
}
  • 時(shí)間戳轉(zhuǎn)時(shí)間
-(NSDate *)dateValueWithMillisecondsSince1970 {
    return [NSDate dateWithTimeIntervalSince1970:[self doubleValue] / 1000];
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末野揪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子瞧栗,更是在濱河造成了極大的恐慌斯稳,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件迹恐,死亡現(xiàn)場(chǎng)離奇詭異挣惰,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)殴边,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門憎茂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人锤岸,你說(shuō)我怎么就攤上這事竖幔。” “怎么了是偷?”我有些...
    開(kāi)封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵拳氢,是天一觀的道長(zhǎng)募逞。 經(jīng)常有香客問(wèn)我,道長(zhǎng)馋评,這世上最難降的妖魔是什么放接? 我笑而不...
    開(kāi)封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮留特,結(jié)果婚禮上纠脾,老公的妹妹穿的比我還像新娘。我一直安慰自己磕秤,他們只是感情好乳乌,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著市咆,像睡著了一般汉操。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蒙兰,一...
    開(kāi)封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天磷瘤,我揣著相機(jī)與錄音,去河邊找鬼搜变。 笑死采缚,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的挠他。 我是一名探鬼主播扳抽,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼殖侵!你這毒婦竟也來(lái)了贸呢?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤拢军,失蹤者是張志新(化名)和其女友劉穎楞陷,沒(méi)想到半個(gè)月后茉唉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體固蛾,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡度陆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了懂傀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片趾诗。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖沧竟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情悟泵,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布闪水,位于F島的核電站糕非,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏球榆。R本人自食惡果不足惜朽肥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一持钉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧每强,春花似錦、人聲如沸浪箭。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)门坷。三九已至,卻和暖如春拜鹤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背敏簿。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留温数,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓撑刺,卻偏偏與公主長(zhǎng)得像握玛,于是被迫代替她去往敵國(guó)和親甫菠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

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

  • 首先寂诱,我們需要知道何謂謂詞安聘,讓我們看看官方的解釋:The NSPredicate class is used to...
    旭日飛揚(yáng)閱讀 1,521評(píng)論 0 0
  • iOS 常用正則表達(dá)式正則表達(dá)式用于字符串處理、表單驗(yàn)證等場(chǎng)合丘喻,實(shí)用高效∧罹保現(xiàn)將一些常用的表達(dá)式收集于此泉粉,以備不時(shí)之...
    LZM輪回閱讀 608評(píng)論 0 0
  • iOS常用正則表達(dá)式 正則表達(dá)式用于字符串處理榴芳、表單驗(yàn)證等場(chǎng)合,實(shí)用高效〈溆铮現(xiàn)將一些常用的表達(dá)式收集于此叽躯,以備不時(shí)之...
    Flonger閱讀 2,433評(píng)論 0 0
  • 摘自http://blog.csdn.net/xlawszero/article/details/52053184...
    RunnerFL閱讀 557評(píng)論 0 0
  • //獲取document路徑 + (nullable NSString *)getDocumentPath; { ...
    Isspace閱讀 352評(píng)論 0 2