<iOS小技巧> 昵称格式判断

一、使用方式

+ 如下代码块功能:判断字体,判断字体输入格式

NSString *firstStr = [name substringToIndex:1];
    NSArray *num = @[@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9"];
    if ([num containsObject:firstStr]) {
        [self warnUser:@"昵称不能以数字开头"];
        return;
    }
   
    if ([name containsStringAvailable:@" "]) {
        [self warnUser:@"昵称不可以包含空格"];
        return;
    }
   
    if ([StringUtil stringContainsEmoji:name]) {
        [self warnUser:@"昵称不可以包含表情等特殊字符"];
        return;
    }
   
    if ([StringUtil lengthByUTF8:name] > 24) {
        [self warnUser:@"昵称过长, 汉字最多8个, 英文最多24个"];
        return;
    }

+ containsStringAvailable() 方法:用来判断是否包含此字符

- (BOOL)containsStringAvailable:(NSString *)other
{
    if ([selfisIOS8AndLater]) {
        return [self containsString:other];
    }
    else {
        NSRange range = [self rangeOfString:other];
        return range.length != 0;
    }
}

- (BOOL)isIOS8AndLater
{
    return [[[UIDevicecurrentDevice] systemVersion] floatValue] >= 8.0;
}

+ stringContainsEmoji() 方法:用来判断是否包含表情字符

+ (BOOL)stringContainsEmoji:(NSString *)string
{
    __blockBOOL returnValue = NO;
   
    NSRange range = NSMakeRange(0, [string length]);
    [string enumerateSubstringsInRange:range options:NSStringEnumerationByComposedCharacterSequencesusingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
        constunichar high = [substring characterAtIndex: 0];
       
        // Surrogate pair (U+1D000-1F9FF)
        if (0xD800 <= high && high <= 0xDBFF) {
            constunichar low = [substring characterAtIndex: 1];
            constint codepoint = ((high - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000;
           
            if (0x1D000 <= codepoint && codepoint <= 0x1F9FF){
                returnValue = YES;
            }
        }
        // Not surrogate pair (U+2100-27BF)
        else {
            if (0x2100 <= high && high <= 0x27BF){
                returnValue = YES;
            }
        }
    }];
    return returnValue;
}

+ lengthByUTF8() 方法:用来判断 UTF-8 字符长度(一个汉字 = 3个 UTF-8 字符)

+ (int)lengthByUTF8:(NSString *)str
{
    int strlength = 0;
    char *p = (char *)[str cStringUsingEncoding:NSUTF8StringEncoding];
    for (int i=0; i<[str lengthOfBytesUsingEncoding:NSUTF8StringEncoding]; i++) {
        if (*p) {
            p++;
            strlength++;
        }
        else {
            p++;
        }
    }
   
    return strlength;
}

二、我的想法

明天要出个String 的工具类出来,分别讲解一下string需要的方法,今天在判断UTF-8字符长度的时候,判断错了,把一个汉字作为两个长度处理了,导致测试测出Bug,这些小问题一定要自我验证,不能到测试那里才出现这种问题。

三、思考与行动

1.如何通过一个方法来判断汉字最多10个,英文最多5个?

2.判断是否包含表情字符的方法,我设计的合理么?是否会存在一些问题?你有没有更简洁的方法?

时间: 2024-10-23 02:41:35

<iOS小技巧> 昵称格式判断的相关文章

iOS 小技巧总结,绝对有你想要的

iOS 小技巧总结,绝对有你想要的 原文链接:http://www.jianshu.com/p/4523eafb4cd4 在这里总结一些 iOS 开发中的小技巧,能大大方便我们的开发,持续更新. —— 由 xcvxvxc分享 在这里总结一些iOS开发中的小技巧,能大大方便我们的开发,持续更新. UITableView的Group样式下顶部空白处理 在viewWillAppear里面添加如下代码: //分组列表头部空白处理 CGRect frame = myTableView.tableHeade

iOS小技巧--用runtime 解决UIButton 重复点击问题

iOS小技巧–用runtime 解决UIButton 重复点击问题 什么是这个问题 我们的按钮是点击一次响应一次, 即使频繁的点击也不会出问题, 可是某些场景下还偏偏就是会出问题. 通常是如何解决 我们通常会在按钮点击的时候设置这个按钮不可点击. 等待0.xS的延时后,在设置回来; 或者在操作结束的时候设置可以点击. - (IBAction)clickBtn1:(UIbutton *)sender { sender.enabled = NO; doSomething sender.enabled

iOS小技巧总结,绝对有你想要的

原文链接 在这里总结一些iOS开发中的小技巧,能大大方便我们的开发,持续更新. UITableView的Group样式下顶部空白处理 //分组列表头部空白处理 UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0.1)]; self.tableView.tableHeaderView = view; UITableView的plain样式下,取消区头停滞效果 - (void)scrollViewDidScroll:(

ios小技巧

ios开发小技巧(转) 1.通过下面方式可以获取图片的像素颜色点:- (void*)getImageData:(UIImage*)image{    void* imageData;    if (imageData == NULL)         imageData = malloc(4 * image.size.width * image.size.height);        CGColorSpaceRef cref = CGColorSpaceCreateDeviceRGB();  

iOS小技巧---swift 判断IOS版本及适配

operatingSystemVersion 为了更复杂的版本比较,operatingSystemVersion能够被直接检查.将它和Swift模式比较和switch语句组合,可以使得代码更简洁. let os = NSProcessInfo().operatingSystemVersion switch  (os.majorVersion, os.minorVersion, os.patchVersion) { case  (8, _, _):      println( "iOS >=

你想要的iOS 小技巧总结

UITableView的Group样式下顶部空白处理 //分组列表头部空白处理 UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0.1)]; self.tableView.tableHeaderView = view; UITableView的plain样式下,取消区头停滞效果 - (void)scrollViewDidScroll:(UIScrollView *)scrollView { CGFloat sect

iOS小技巧:用runtime 解决UIButton 重复点击问题

http://www.cocoachina.com/ios/20150911/13260.html 作者:uxyheaven 授权本站转载. 什么是这个问题 我们的按钮是点击一次响应一次, 即使频繁的点击也不会出问题, 可是某些场景下还偏偏就是会出问题. 通常是如何解决 我们通常会在按钮点击的时候设置这个按钮不可点击. 等待0.xS的延时后,在设置回来; 或者在操作结束的时候设置可以点击. 1 2 3 4 5 6 - (IBAction)clickBtn1:(UIbutton *)sender

IOS小技巧整理

1 随机数的使用  头文件的引用         #import <time.h>        #import <mach/mach_time.h> srandom()的使用         srandom((unsigned)(mach_absolute_time() & 0xFFFFFFFF)); 直接使用 random() 来调用随机数 2 在UIImageView 中旋转图像  float rotateAngle = M_PI;        CGAffineTr

&lt;iOS小技巧&gt; 返回上级目录操作Goback()方法

Goback()方法功能:返回上一级界面,通过判断 popViewControllerAnimated 类型是否为空,来判断是present还是pop出来,然后直接做了releaseSelf操作: - (void)goBack {    IDSLOG(@"self: %@, parent: %@", self, [self parentViewController]);        id page = [self presentingViewController];    IDSLO