| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
dw7n
10年前发布

iOS 字符串常用判定库

直接上代码。

NSString+Estimat.h

#import <Foundation/Foundation.h>    @interface NSString (Estimate)    + (BOOL)isNotBlank:(NSString*)source;    + (BOOL)isBlank:(NSString*)source;    //正整数验证(带0).  +(BOOL) isPositiveNum:(NSString*)source;  //非0正整数验证.  +(BOOL) isNumNotZero:(NSString*)source;  //不是数字英文字母验证.  +(BOOL) isNotNumAndLetter:(NSString*)source;    //整数验证.  +(BOOL) isInt:(NSString*)source;  //小数正验证.  +(BOOL) isFloat:(NSString*)source;    //日期验证.  +(BOOL) isDate:(NSString*)source;  // 是否是纯数字  + (BOOL)isValidNumber:(NSString*)value;    //URL路径过滤掉随机数.  +(NSString*) urlFilterRan:(NSString*)urlPath;    +(NSString *)getUniqueStrByUUID;    //验证Email是否正确.  + (BOOL)isValidateEmail:(NSString *)email;    //传真验证  + (BOOL)isValidateFax:(NSString *)fax;    //验证手机号  + (BOOL)validateMobile:(NSString *)mobileNum;    //判断手机号及其后四位  + (BOOL)isValidatePhone:(NSString *)phoneNumber;    + (NSString *)stringForObject:(NSString *)source;    //有效银行卡号验证  + (BOOL) isValidCreditNumber:(NSString*)value;    //身份证验证  + (BOOL) validateIDCardNumber:(NSString *)value;    //获得简写的单号  + (NSString *)shortStringForOrderID:(NSString *)orderID;  @end

NSString+Estimat.m

#import "NSString+Estimate.h"  #import "RegexKitLite.h"    @implementation NSString (Estimate)      + (BOOL)isNotBlank:(NSString*)source  {      if(source == nil || [source isEqual:[NSNull null]] || source.length == 0 || [source stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]].length == 0) {          return NO;      }      return YES;  }    + (BOOL)isBlank:(NSString*)source  {      if(source == nil || [source isEqual:[NSNull null]] || source.length == 0 || [source stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]].length == 0) {          return YES;      }      return NO;  }    //非0正整数验证.  +(BOOL) isNumNotZero:(NSString*)source  {      if ([NSString isBlank:source]) {          return NO;      }      NSString* format=@"^[1-9]\\d*$";      return [source isMatchedByRegex:format];  }    //正整数验证(带0).  +(BOOL) isPositiveNum:(NSString*)source  {      if ([NSString isBlank:source]) {          return NO;      }      NSString* format=@"^[1-9]\\d*|0$";      return [source isMatchedByRegex:format];  }    //整数验证.  +(BOOL) isInt:(NSString*)source  {      if ([NSString isBlank:source]) {          return NO;      }      NSString* format=@"^-?[1-9]\\d*$";      return [source isMatchedByRegex:format];  }    //小数正验证.  +(BOOL) isFloat:(NSString*)source  {      if ([NSString isBlank:source]) {          return NO;      }      if ([NSString isPositiveNum:source]) {          return YES;      }      NSString* format=@"^[1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*$";      return [source isMatchedByRegex:format];  }      // 是否是纯数字  + (BOOL)isValidNumber:(NSString*)value  {      NSString* num = @"^[0-9]+$";      NSPredicate *regextestnum = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", num];      return [regextestnum evaluateWithObject:value];;  }    //包换不是数字英文字母验证.  +(BOOL) isNotNumAndLetter:(NSString*)source  {      if ([NSString isBlank:source]) {          return YES;      }      NSString* format=@"[^a-zA-Z0-9]+";      return [source isMatchedByRegex:format];  }    //日期验证.  +(BOOL) isDate:(NSString*)source  {      if ([NSString isBlank:source]) {          return NO;      }      NSString* format=@"^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2} CST$";      return [source isMatchedByRegex:format];  }    //URL路径过滤掉随机数.  +(NSString*) urlFilterRan:(NSString*)urlPath  {      NSString *regex = @"(.*)([\\?|&]ran=[^&]+)";      return [urlPath stringByReplacingOccurrencesOfRegex:regex withString:@"$1"];  }    +(NSString *)getUniqueStrByUUID {      CFUUIDRef uuidRef = CFUUIDCreate(NULL);      CFStringRef uuidStrRef= CFUUIDCreateString(NULL, uuidRef);      CFRelease(uuidRef);      NSString *retStr = [NSString stringWithString:(__bridge NSString *)uuidStrRef];      CFRelease(uuidStrRef);      retStr=[retStr stringByReplacingOccurrencesOfString:@"-" withString:@""];      return [retStr lowercaseString];  }    //验证Email是否正确.  + (BOOL)isValidateEmail:(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)isValidateFax:(NSString *)fax  {      NSString *faxRegex = @"^(([0-9]{3})|([0-9]{4}))[-]\\d{6,8}$";      NSPredicate *faxTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", faxRegex];      return [faxTest evaluateWithObject:fax];  }    //判断手机号  + (BOOL)validateMobile:(NSString *)mobileNum  {      /**       * 手机号码       * 移动:139 138 137 136 135 134 147 150 151 152 157 158 159 178 182 183 184 187 188       * 联通:130 131 132 155 156 185 186 145 176       * 电信:133 153 177 180 181 189       * 卫星通信: 1349       * 虚拟运营商: 170       */      NSString * MOBILE = @"(^13\\d{9})$|((^14)[5,7]\\d{8}$)|(^15[0,1,2,3,5,6,7,8,9]\\d{8}$)|((^17)[0,6,7,8]\\d{8}$)|(^18\\d{9}$)";      NSPredicate *regextestmobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBILE];      if (([regextestmobile evaluateWithObject:mobileNum] == YES))      {          return YES;      }      else      {          return NO;      }  }    //判断手机号及其后四位  + (BOOL)isValidatePhone:(NSString *)phoneNumber {           if ([NSString isPositiveNum:phoneNumber]) {          if (phoneNumber.length == 11) {              if ([self validateMobile:phoneNumber]) {                  return YES;              } else {                  return NO;            }          } else if (phoneNumber.length == 4) {              return YES;          } else {              return NO;          }                } else {          return NO;      }      return YES;  }    + (NSString *)stringForObject:(NSString *)source {      if (source == nil || [source isEqual:[NSNull null]]) {          return @"";      } else {          return source;      }  }    // 判断是否有效银行卡号  + (BOOL) isValidCreditNumber:(NSString*)value {            BOOL result = NO;            NSInteger length = [value length];            if (length >= 13) {                    result = [self isValidNumber:value];                    if (result)          {              int sum = 0;              int digit = 0;              int addend = 0;              BOOL timesTwo = false;              for (NSInteger i = value.length - 1; i >= 0; i--)              {                  digit = [value characterAtIndex:i] - '0';                  if (timesTwo) {                      addend = digit * 2;                      if (addend > 9) {                          addend -= 9;                      }                  } else {                      addend = digit;                  }                  sum += addend;                  timesTwo = !timesTwo;              }              int modulus = sum % 10;              return modulus == 0;          }                }else {                    result = FALSE;                }      return result;  }      //身份证验证  + (BOOL)validateIDCardNumber:(NSString *)value {            value = [value stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];            NSUInteger length =0;            if (!value) {          return NO;      }else {                    length = value.length;          if (length !=15 && length !=18) {              return NO;          }                }            // 省份代码      NSArray *areasArray =@[@"11",@"12", @"13",@"14", @"15",@"21", @"22",@"23", @"31",@"32", @"33",@"34", @"35",@"36", @"37",@"41",@"42",@"43", @"44",@"45", @"46",@"50", @"51",@"52", @"53",@"54", @"61",@"62", @"63",@"64", @"65",@"71", @"81",@"82", @"91"];                        NSString *valueStart2 = [value substringToIndex:2];            BOOL areaFlag = NO;            for (NSString *areaCode in areasArray) {                    if ([areaCode isEqualToString:valueStart2]) {              areaFlag =YES;              break;          }                }            if (!areaFlag) {          return false;      }                  NSRegularExpression *regularExpression;      NSUInteger numberofMatch;      int year =0;            switch (length) {          case 15:              year = [value substringWithRange:NSMakeRange(6,2)].intValue +1900;                            if (year %4 ==0 || (year %100 ==0 && year %4 ==0)) {                  regularExpression = [[NSRegularExpression alloc]initWithPattern:@"^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$"                                                                          options:NSRegularExpressionCaseInsensitive                                                                            error:nil];//测试出生日期的合法性                                }else {                  regularExpression = [[NSRegularExpression alloc]initWithPattern:@"^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$"                                                                          options:NSRegularExpressionCaseInsensitive                                                                            error:nil];//测试出生日期的合法性                                }                            numberofMatch = [regularExpression numberOfMatchesInString:value                                                                 options:NSMatchingReportProgress                                                                   range:NSMakeRange(0, value.length)];                              if(numberofMatch >0){                  return YES;              }else {                  return NO;              }                        case 18:              year = [value substringWithRange:NSMakeRange(6,4)].intValue;                            if (year %4 ==0 || (year %100 ==0 && year %4 ==0)) {                                                                        regularExpression = [[NSRegularExpression alloc]initWithPattern:@"^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$"                                                                          options:NSRegularExpressionCaseInsensitive                                                                            error:nil];//测试出生日期的合法性                                }else {                  regularExpression = [[NSRegularExpression alloc]initWithPattern:@"^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$"                                                                          options:NSRegularExpressionCaseInsensitive                                                                            error:nil];//测试出生日期的合法性              }                            numberofMatch = [regularExpression numberOfMatchesInString:value                                                                 options:NSMatchingReportProgress                                                                   range:NSMakeRange(0, value.length)];                              if(numberofMatch >0) {                                    int S = ([value substringWithRange:NSMakeRange(0, 1)].intValue  +                           [value substringWithRange:NSMakeRange(10,1)].intValue)*7  +                          ([value substringWithRange:NSMakeRange(1, 1)].intValue  +                           [value substringWithRange:NSMakeRange(11,1)].intValue)*9  +                          ([value substringWithRange:NSMakeRange(2, 1)].intValue  +                           [value substringWithRange:NSMakeRange(12,1)].intValue)*10 +                          ([value substringWithRange:NSMakeRange(3, 1)].intValue  +                           [value substringWithRange:NSMakeRange(13,1)].intValue)*5  +                          ([value substringWithRange:NSMakeRange(4, 1)].intValue  +                           [value substringWithRange:NSMakeRange(14,1)].intValue)*8  +                          ([value substringWithRange:NSMakeRange(5, 1)].intValue  +                           [value substringWithRange:NSMakeRange(15,1)].intValue)*4  +                          ([value substringWithRange:NSMakeRange(6, 1)].intValue  +                           [value substringWithRange:NSMakeRange(16,1)].intValue)*2  +                          [value substringWithRange:NSMakeRange(7,1)].intValue *1 +                          [value substringWithRange:NSMakeRange(8,1)].intValue *6 +                          [value substringWithRange:NSMakeRange(9,1)].intValue *3;                                    int Y = S % 11;                                    NSString *M =@"F";                                    NSString *JYM =@"10X98765432";                                    M = [JYM substringWithRange:NSMakeRange(Y,1)];// 判断校验位                                    if ([M isEqualToString:[value substringWithRange:NSMakeRange(17,1)]]) {                      return YES;// 检测ID的校验位                  }else {                      return NO;                  }              }else {                  return NO;              }          default:              return NO;                    }        }      //获得简写的单号  + (NSString *)shortStringForOrderID:(NSString *)orderID{            if (orderID == nil || [orderID isEqual:[NSNull null]]) {          return @"";      } else {          NSString *firstChar = [orderID substringToIndex:1];          NSString *firstThreeChars = [orderID substringToIndex:3];          NSString *shortId;          if ([firstChar isEqualToString:@"1"]) {              //实体销售单,取后17位              shortId = [orderID substringFromIndex:orderID.length - 17];          }else if ([firstChar isEqualToString:@"2"]){              //实体退货单,取后15位              shortId = [orderID substringFromIndex:orderID.length - 15];          }else if ([firstThreeChars isEqualToString:@"ROW"]){              //微店销售单,去掉前三位  //            shortId = [orderID substringFromIndex:3];              //最新需求不做处理              shortId = orderID;          }else if ([firstThreeChars isEqualToString:@"RBW"]){              //微店退货单,去掉前三位              //shortId = [orderID substringFromIndex:3];              //最新需求不做处理              shortId = orderID;          }else if ([firstChar isEqualToString:@"8"]){              //退货单,取后15位              shortId = [orderID substringFromIndex:orderID.length - 15];          }          return shortId;      }    }  @end