一、使用方式
+ 如下代码块功能:判断字体,判断字体输入格式
 
    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.判断是否包含表情字符的方法,我设计的合理么?是否会存在一些问题?你有没有更简洁的方法?
 
 
 
 
 
 
 
 
 
 
 

最新文章

  1. ASP.NET MVC5+EF6+EasyUI 后台管理系统(63)-Excel导入和导出
  2. 浅析Java中的访问权限控制
  3. placeholder在不同浏览器下的表现及兼容方法
  4. Visio编辑数据库模型列
  5. 【BZOJ】【1050】【HAOI2006】旅行comf
  6. HTML5入门3---视频播放器
  7. Android:双层嵌套ViewPager并添加单击事件
  8. javascript 内置对象 第17节
  9. Tomcat启动失败闪退
  10. nginx---Beginner&#39;s Guide
  11. mysql服务设置远程连接 解决1251 client does not support ..问题
  12. Python3:判断三角形的类型
  13. 【Java每日一题】20170224
  14. python3编写网络爬虫18-代理池的维护
  15. Redis入门及主从配置
  16. sqlserver 当前时间减去30天
  17. dedecms 后台修改系统设置,但是config.cache.inc.php文件不能写入
  18. Django框架之Ajax和form组件
  19. C#实现Access导入导出Excel
  20. ThinkPHP 3.2.x 集成极光推送指北

热门文章

  1. VS2017 安装过程
  2. 强大的 pdf 编辑器 —— Acrobat
  3. UVA 1347(POJ 2677) Tour(双色欧几里德旅行商问题)
  4. 3DTools TrackballDecorator实现3D漫游
  5. 如何将任意文件固定在 Win10 的开始屏幕中
  6. ‘3 sigma’rule(68–95–99.7 rule)
  7. x:Static&nbsp;,&nbsp;StaticResource&nbsp;和DynamicResource等XAML&nbsp;扩展用法
  8. Centos下一个server安装的版本号mysql
  9. jqmobi api 详细解说
  10. Servlet的基础知识