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 本文由用戶 dw7n 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!