zoukankan      html  css  js  c++  java
  • <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.判断是否包含表情字符的方法,我设计的合理么?是否会存在一些问题?你有没有更简洁的方法?
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    大三寒假学习进度(3)
    大三寒假学习进度(2)
    大三寒假学习进度(1)
    Tensorflow深度学习(二)
    Tensorflow深度学习(一)
    了解使用Pyppeteer
    为什么我还可以继续使用python自动填问卷星?
    周总结(十四)
    docker常用命令总结
    周总结(十三)
  • 原文地址:https://www.cnblogs.com/firstrate/p/7134519.html
Copyright © 2011-2022 走看看