美文网首页
iOS常用验证

iOS常用验证

作者: gezhenrong | 来源:发表于2017-04-28 11:25 被阅读111次

验证邮箱

<pre>+ (BOOL)isValidUsername:(NSString *)username {

// 验证用户名 - 邮箱
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:username];

}</pre>

验证手机号

<pre>+ (BOOL)isTelephone:(NSString )mobile
{
if (mobile.length < 11)
{
return NO;
}else{
/
*
* 移动号段正则表达式
/
NSString CM_NUM = @"^((13[4-9])|(147)|(15[0-2,7-9])|(178)|(18[2-4,7-8]))\d{8}|(1705)\d{7}$";
/

* 联通号段正则表达式
/
NSString CU_NUM = @"^((13[0-2])|(145)|(15[5-6])|(176)|(18[5,6]))\d{8}|(1709)\d{7}$";
/

* 电信号段正则表达式
*/
NSString *CT_NUM = @"^((133)|(153)|(177)|(18[0,1,9]))\d{8}$";
NSPredicate *pred1 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CM_NUM];
BOOL isMatch1 = [pred1 evaluateWithObject:mobile];
NSPredicate *pred2 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CU_NUM];
BOOL isMatch2 = [pred2 evaluateWithObject:mobile];
NSPredicate *pred3 = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CT_NUM];
BOOL isMatch3 = [pred3 evaluateWithObject:mobile];

    if (isMatch1 || isMatch2 || isMatch3) {
        return YES;

// if (isMatch1) {
// return @"该号码是一个正确的移动手机号码";
// }else if (isMatch2) {
// return @"该号码是一个正确的联通手机号码";
// }else {
// return @"该号码是一个正确的电信手机号码";
// }
}else{
return NO;
}
}
return nil;
}
</pre>

验证身份证是否合法

<pre>+ (BOOL)validateIDCardNumber:(NSString *)valueStr{
valueStr = [valueStr stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSUInteger length =0;
if (!valueStr) {
return NO;
}else {
length = valueStr.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 = [valueStr 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) {
case15:
year = [valueStr 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:valueStr options:NSMatchingReportProgress range:NSMakeRange(0, valueStr.length)];
if(numberofMatch >0) {
return YES;
}else {
return NO;
}
case18:
year = [valueStr 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:valueStr
options:NSMatchingReportProgress
range:NSMakeRange(0, valueStr.length)];
if(numberofMatch >0) {
int S = ([valueStr substringWithRange:NSMakeRange(0,1)].intValue + [valueStr substringWithRange:NSMakeRange(10,1)].intValue) *7 + ([valueStr substringWithRange:NSMakeRange(1,1)].intValue + [valueStr substringWithRange:NSMakeRange(11,1)].intValue) *9 + ([valueStr substringWithRange:NSMakeRange(2,1)].intValue + [valueStr substringWithRange:NSMakeRange(12,1)].intValue) *10 + ([valueStr substringWithRange:NSMakeRange(3,1)].intValue + [valueStr substringWithRange:NSMakeRange(13,1)].intValue) *5 + ([valueStr substringWithRange:NSMakeRange(4,1)].intValue + [valueStr substringWithRange:NSMakeRange(14,1)].intValue) *8 + ([valueStr substringWithRange:NSMakeRange(5,1)].intValue + [valueStr substringWithRange:NSMakeRange(15,1)].intValue) *4 + ([valueStr substringWithRange:NSMakeRange(6,1)].intValue + [valueStr substringWithRange:NSMakeRange(16,1)].intValue) *2 + [valueStr substringWithRange:NSMakeRange(7,1)].intValue *1 + [valueStr substringWithRange:NSMakeRange(8,1)].intValue *6 + [valueStr 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:[valueStr substringWithRange:NSMakeRange(17,1)]]) {
return YES;// 检测ID的校验位
}else {
return NO;
}
}else {
return NO;
}
default:
return false;
}
}</pre>

获取星期

<pre>+(NSString *)dateTomorrow:(NSDate *)date
{
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSInteger unitFlags = NSYearCalendarUnit |
NSMonthCalendarUnit |
NSDayCalendarUnit |
NSWeekdayCalendarUnit |
NSHourCalendarUnit |
NSMinuteCalendarUnit |
NSSecondCalendarUnit;
NSDateComponents *comps = [calendar components:unitFlags fromDate:date];
long month = [comps month];
long day = [comps day];
long hour = [comps hour];
long minute = [comps minute];
long weekday = [comps weekday];
NSString *weekdayString = @"";
switch (weekday) {
case 1:
weekdayString = @"周日";
break;
case 2:
weekdayString = @"周一";
break;
case 3:
weekdayString = @"周二";
break;
case 4:
weekdayString = @"周三";
break;
case 5:
weekdayString = @"周四";
break;
case 6:
weekdayString = @"周五";
break;
case 7:
weekdayString = @"周六";
break;
default:
break;
}

NSString *dayStr = nil;
if (day < 10) {
    dayStr = [NSString stringWithFormat:@"0%ld",day];
}else{
    dayStr = [NSString stringWithFormat:@"%ld",day];
}

NSString *hourStr = nil;
if (hour < 10) {
    hourStr = [NSString stringWithFormat:@"0%ld",hour];
}else{
    hourStr = [NSString stringWithFormat:@"%ld",hour];
}

NSString *minuteStr = nil;
if (minute < 10) {
    minuteStr = [NSString stringWithFormat:@"0%ld",minute];
}else{
    minuteStr = [NSString stringWithFormat:@"%ld",minute];
}

return [NSString stringWithFormat:@"%ld/%@ %@:%@",month,dayStr,hourStr,minuteStr];

}</pre>

经验总结

禁止手机睡眠
<pre>
[UIApplication sharedApplication].idleTimerDisabled = YES;
</pre>
编译的时候遇到 no such file or directory: /users/apple/XXX
<pre>
答:是因为编译的时候,在此路径下找不到这个文件,解决这个问题,首先是是要检查缺少的文件是不是在工程中,如果不在工程中,需要从本地拖进去,如果发现已经存在工程中了,或者拖进去还是报错,这时候需要去build phases中搜索这个文件,这时候很可能会搜出现两个相同的文件,这时候,有一个路径是正确的,删除另外一个即可。如果删除了还是不行,需要把两个都删掉,然后重新往工程里拖进这个文件即可
</pre>
颜色转换成图片
<pre>

  • (UIImage *)cl_imageWithColor:(UIColor *)color {
    CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSetFillColorWithColor(context, [color CGColor]);
    CGContextFillRect(context, rect);

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return image;
    }
    </pre>
    获取app缓存大小
    <pre>

  • (CGFloat)getCachSize {

    NSUInteger imageCacheSize = [[SDImageCache sharedImageCache] getSize];
    //获取自定义缓存大小
    //用枚举器遍历 一个文件夹的内容
    //1.获取 文件夹枚举器
    NSString *myCachePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Caches"];
    NSDirectoryEnumerator *enumerator = [[NSFileManager defaultManager] enumeratorAtPath:myCachePath];
    __block NSUInteger count = 0;
    //2.遍历
    for (NSString *fileName in enumerator) {
    NSString *path = [myCachePath stringByAppendingPathComponent:fileName];
    NSDictionary *fileDict = [[NSFileManager defaultManager] attributesOfItemAtPath:path error:nil];
    count += fileDict.fileSize;//自定义所有缓存大小
    }
    // 得到是字节 转化为M
    CGFloat totalSize = ((CGFloat)imageCacheSize+count)/1024/1024;
    return totalSize;
    }
    </pre>
    清理app缓存
    <pre>

  • (void)handleClearView {
    //删除两部分
    //1.删除 sd 图片缓存
    //先清除内存中的图片缓存
    [[SDImageCache sharedImageCache] clearMemory];
    //清除磁盘的缓存
    [[SDImageCache sharedImageCache] clearDisk];
    //2.删除自己缓存
    NSString myCachePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Caches"];
    [[NSFileManager defaultManager] removeItemAtPath:myCachePath error:nil];
    }
    </pre>
    常用权限判断
    <pre>
    if ([CLLocationManager authorizationStatus] ==kCLAuthorizationStatusDenied) {
    NSLog(@"没有定位权限");
    }
    AVAuthorizationStatus statusVideo = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
    if (statusVideo == AVAuthorizationStatusDenied) {
    NSLog(@"没有摄像头权限");
    }
    //是否有麦克风权限
    AVAuthorizationStatus statusAudio = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeAudio];
    if (statusAudio == AVAuthorizationStatusDenied) {
    NSLog(@"没有录音权限");
    }
    [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
    if (status == PHAuthorizationStatusDenied) {
    NSLog(@"没有相册权限");
    }
    }];
    </pre>
    获取手机和app信息
    <pre>
    NSDictionary infoDictionary = [[NSBundle mainBundle] infoDictionary];
    CFShow(infoDictionary);
    // app名称
    NSString app_Name = [infoDictionary objectForKey:@"CFBundleDisplayName"];
    // app版本
    NSString app_Version = [infoDictionary objectForKey:@"CFBundleShortVersionString"];
    // app build版本
    NSString app_build = [infoDictionary objectForKey:@"CFBundleVersion"];
    //手机序列号
    NSString
    identifierNumber = [[UIDevice currentDevice] uniqueIdentifier];
    NSLog(@"手机序列号: %@",identifierNumber);
    //手机别名: 用户定义的名称
    NSString
    userPhoneName = [[UIDevice currentDevice] name];
    NSLog(@"手机别名: %@", userPhoneName);
    //设备名称
    NSString
    deviceName = [[UIDevice currentDevice] systemName];
    NSLog(@"设备名称: %@",deviceName );
    //手机系统版本
    NSString
    phoneVersion = [[UIDevice currentDevice] systemVersion];
    NSLog(@"手机系统版本: %@", phoneVersion);
    //手机型号
    NSString
    phoneModel = [[UIDevice currentDevice] model];
    NSLog(@"手机型号: %@",phoneModel );
    //地方型号 (国际化区域名称)
    NSString* localPhoneModel = [[UIDevice currentDevice] localizedModel];
    NSLog(@"国际化区域名称: %@",localPhoneModel );

    NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
    // 当前应用名称
    NSString *appCurName = [infoDictionary objectForKey:@"CFBundleDisplayName"];
    NSLog(@"当前应用名称:%@",appCurName);
    // 当前应用软件版本 比如:1.0.1
    NSString *appCurVersion = [infoDictionary objectForKey:@"CFBundleShortVersionString"];
    NSLog(@"当前应用软件版本:%@",appCurVersion);
    // 当前应用版本号码 int类型
    NSString *appCurVersionNum = [infoDictionary objectForKey:@"CFBundleVersion"];
    NSLog(@"当前应用版本号码:%@",appCurVersionNum);
    </pre>
    获取一个类的所有属性
    <pre>
    id LenderClass = objc_getClass("Lender");
    unsigned int outCount, i;
    objc_property_t *properties = class_copyPropertyList(LenderClass, &outCount);
    for (i = 0; i < outCount; i++) {
    objc_property_t property = properties[i];
    fprintf(stdout, "%s %s\n", property_getName(property), property_getAttributes(property));
    }
    </pre>
    身份证号验证
    <pre>

  • (BOOL)validateIdentityCard {
    BOOL flag;
    if (self.length <= 0) {
    flag = NO;
    return flag;
    }
    NSString *regex2 = @"^(\d{14}|\d{17})(\d|[xX])$";
    NSPredicate *identityCardPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex2];
    return [identityCardPredicate evaluateWithObject:self];
    }
    </pre>
    合并两个图片
    <pre>

  • (UIImage)mergeImage:(UIImage)firstImage withImage:(UIImage*)secondImage {
    CGImageRef firstImageRef = firstImage.CGImage;
    CGFloat firstWidth = CGImageGetWidth(firstImageRef);
    CGFloat firstHeight = CGImageGetHeight(firstImageRef);
    CGImageRef secondImageRef = secondImage.CGImage;
    CGFloat secondWidth = CGImageGetWidth(secondImageRef);
    CGFloat secondHeight = CGImageGetHeight(secondImageRef);
    CGSize mergedSize = CGSizeMake(MAX(firstWidth, secondWidth), MAX(firstHeight, secondHeight));
    UIGraphicsBeginImageContext(mergedSize);
    [firstImage drawInRect:CGRectMake(0, 0, firstWidth, firstHeight)];
    [secondImage drawInRect:CGRectMake(0, 0, secondWidth, secondHeight)];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
    }
    </pre>
    画水印
    <pre>
  • (void) setImage:(UIImage *)image withWaterMark:(UIImage *)mark inRect:(CGRect)rect
    {
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 4.0)
    {
    UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, 0.0);
    }
    //原图
    [image drawInRect:self.bounds];
    //水印图
    [mark drawInRect:rect];
    UIImage *newPic = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    self.image = newPic;
    }
    </pre>
    获取视频的时长
    <pre>
  • (NSInteger)getVideoTimeByUrlString:(NSString *)urlString {
    NSURL *videoUrl = [NSURL URLWithString:urlString];
    AVURLAsset *avUrl = [AVURLAsset assetWithURL:videoUrl];
    CMTime time = [avUrl duration];
    int seconds = ceil(time.value/time.timescale);
    return seconds;
    }
    </pre>
    -[ViewController aMethod:]: unrecognized selector sent to instance 0x7fe91e607fb0
    <pre>
    这是一个经典错误,ViewController不能响应aMethod这个方法,错误原因可能viewController文件中没有实现aMethod这个方法
    </pre>
    让手机震动一下
    <pre>

import

AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);
或者
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
</pre>
将一个image保存在相册中
<pre>
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
或者

import

[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
PHAssetChangeRequest *changeRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:image];
changeRequest.creationDate = [NSDate date];
} completionHandler:^(BOOL success, NSError *error) {
if (success) {
NSLog(@"successfully saved");
}
else {
NSLog(@"error saving to photos: %@", error);
}
}];
</pre>
UITextView中打开或禁用复制,剪切,选择,全选等功能
<pre>
// 继承UITextView重写这个方法

  • (BOOL)canPerformAction:(SEL)action withSender:(id)sender
    {
    // 返回NO为禁用,YES为开启
    // 粘贴
    if (action == @selector(paste:)) return NO;
    // 剪切
    if (action == @selector(cut:)) return NO;
    // 复制
    if (action == @selector(copy:)) return NO;
    // 选择
    if (action == @selector(select:)) return NO;
    // 选中全部
    if (action == @selector(selectAll:)) return NO;
    // 删除
    if (action == @selector(delete:)) return NO;
    // 分享
    if (action == @selector(share)) return NO;
    return [super canPerformAction:action withSender:sender];
    }
    </pre>
    runtime为一个类动态添加属性
    <pre>
    // 动态添加属性的本质是: 让对象的某个属性与值产生关联
    objc_setAssociatedObject(self, WZBPlaceholderViewKey, placeholderView, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    </pre>

KVO监听某个对象的属性
<pre>
// 添加监听者
[self addObserver:self forKeyPath:property options:NSKeyValueObservingOptionNew context:nil];

// 当监听的属性值变化的时候会来到这个方法

  • (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    if ([keyPath isEqualToString:@"property"]) {
    [self textViewTextChange];
    } else {
    }
    }
    </pre>
    网络监测
    <pre>
    NetworkStatus status = [[Reachability reachabilityForInternetConnection] currentReachabilityStatus];
    if (status == NotReachable) {
    NSLog(@"当前设备无网络");
    }
    if (status == ReachableViaWiFi) {
    NSLog(@"当前wifi网络");
    }
    if (status == NotReachable) {
    NSLog(@"当前蜂窝移动网络");
    }
    </pre>

相关文章

网友评论

      本文标题:iOS常用验证

      本文链接:https://www.haomeiwen.com/subject/kamozttx.html