iOS判断汉字个数

作者: iHTCboy | 来源:发表于2015-04-18 00:31 被阅读2841次

    最近在做注册登陆的认证,需求:
    用户名为6~12位“字符”
    也就是说,一个英文是一个字符,一个中文是两个字符,用正则表达式好像不容易实现吧?

    没什么好说的,直接上答案了:

    判断字符数

    //判断字符串为6~12位“字符” 
    - (BOOL)isValidateName:(NSString *)name{
            NSUInteger  character = 0;
            for(int i=0; i< [name length];i++){
                int a = [name characterAtIndex:i];
                if( a >= 0x4e00 && a <= 0x9fa5){ //判断是否为中文
                    character +=2;
                }else{
                    character +=1;
                }
            }
        
        if (character >=6 && character <=12) {
            return YES;
        }else{
            return NO;
        }
        
    }
    
    

    判断邮箱号

    //如果符合邮箱格式,返回YES
    -(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];
    }
    

    判断密码为6~20位字符

    - (BOOL)isValidatePassword:(NSString *)password{
        NSString *regex = @"^[\x21-\x7E]{6,20}$";
        NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
        return [pred evaluateWithObject:password];
    }
    

    判断手机格式

    + (BOOL)checkTel:(NSString *)str{
        NSString *regex = @"^[1][3-8]+\\d{9}";//手机号码变化大,所以没有做更精确
        NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
        return  [pred evaluateWithObject:str];;
    }
    

    判断邮编格式为6位数字

    + (BOOL)checkPostCode:(NSString *)str{
        NSString *regex = @"^[0-9]{6}$";
        NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
        return  [pred evaluateWithObject:str];
    }
    
    • 如果有什么疑问,可以在评论区一起讨论;
    • 如果有什么不正确的地方,欢迎指导!

    注:本文首发于 iHTCboy's blog,如若转载,请注明来源。

    相关文章

      网友评论

      • 没得到的是你没遇到呢://判断字符串为6~12位“字符”
        - (BOOL)isValidateName:(NSString *)name{
        NSUInteger character = 0;
        for(int i=0; i< [name length];i++){
        int a = [name characterAtIndex:i];
        if( a >= 0x4e00 && a <= 0x9fff){ //判断是否为中文
        character +=2;
        }else{
        character +=1;
        }
        }

        if (character >=6 && character <=12) {
        return YES;
        }else{
        return NO;
        }

        }
        没得到的是你没遇到呢:看了评论改了一下
      • hjqiaho:应该是这个 ( a >= 0x4e00 && a <= 0x9fff)

        网上全是复制的 都错的 被坑哭了啊
        iHTCboy:@hjqiaho 谢谢指真!
        iHTCboy:@hjqiaho 哈哈,真理获得从来都不容易~
        hjqiaho:@hjqiaho ( a >= 0x4e00 && a <= 0x9fa5)
      • KamyShi:计算字符个数,
        if( a > 0x4e00 && a < 0x9fff){ //判断是否为中文
        前面是要等于0x4e00的,大兄弟,你这从哪复制的,好一顿坑坏老百姓,

        0x4e00在中文中是汉字 “一”,u9fa5--0x9fff是日韩字符。
        iHTCboy:@KamyShi 谢谢手下留情,哈哈,真理获得从来都不容易~
        郑州程序员王一:@KamyShi 好一顿坑坏老百姓,哈哈
        80acb3db259c:@KamyShi 正确的应该是if( a > 0x4e00 && a < u9fa5){ //判断是否为中文
        http://blog.csdn.net/a351945755/article/details/41945039 (但我还没有测试)

      本文标题:iOS判断汉字个数

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