美文网首页
iOS开发之限制中文、英文、数字的输入

iOS开发之限制中文、英文、数字的输入

作者: _烩面_ | 来源:发表于2018-01-14 18:56 被阅读767次

    目前的开发的项目中有限制字符输入的需求,趁此机会整理一下这个知识点。

    1 严格限制输入中文。中文unicode码的范围是4E00-9FEA ,共20970个汉字。

    有兴趣的可以去这个地址http://www.unicode.org/charts/PDF/U4E00.pdf看看。

    - (BOOL)isChineseCharacter:(NSString*)source {
    
        NSString *regex = @"^[\\u4E00-\\u9FEA]+$";
    
        return ([source rangeOfString:regex options:NSRegularExpressionSearch].length>0);
    
    }
    

    2 严格限制输入英文字母

    英文unicode码的范围是 0041-005A(大写字母)和 0061-007A(小写字母)

    - (BOOL)isEnglishCharacter:(NSString*)source {
    
        NSString *upperRegex = @"^[\\u0041-\\u005A]+$";
    
        NSString *lowerRegex = @"^[\\u0061-\\u007A]+$";
    
        BOOL isEnglish = (([source rangeOfString:upperRegex options:NSRegularExpressionSearch].length>0) || ([source rangeOfString:lowerRegex options:NSRegularExpressionSearch].length>0));
    
        returnisEnglish;
    
    }
    

    3 严格限制输入数字。数字的unicode范围是 0030-0039

    - (BOOL)isNumber:(NSString*)source {
    
        NSString *regex = @"^[\\u0030-\\u0039]+$";
    
        return ([source rangeOfString:regex options:NSRegularExpressionSearch].length>0);
    
    }
    

    以上方法仅是一种解决问题的思路,仅供参考。

    在实际的情况中,往往不会是这么严格的限定。空格,标点符号你总得让用户去输入吧!所以,这个时候,在做限制的时候就要考虑到其他的情况。要不然用户该骂娘了!最重要的是,你下个月的“五险一金”可能要换个老板给你交了!

    --------------------------- 分割线 ---------------------------

    下面附上限制输入Emoji的方法,来自https://www.jianshu.com/p/5227e6aab4d4

    - (BOOL)stringContainsEmoji:(NSString*)source {
    
        __blockBOOLreturnValue =NO;
    
        [sourceenumerateSubstringsInRange:NSMakeRange(0, [source length])
    
                                   options:NSStringEnumerationByComposedCharacterSequences
    
                                usingBlock:^(NSString*substring,NSRangesubstringRange,NSRangeenclosingRange,BOOL*stop) {
    
                                    constunicharhs = [substringcharacterAtIndex:0];
    
                                    if(0xd800<= hs && hs <=0xdbff) {
    
                                        if(substring.length>1) {
    
                                            constunicharls = [substringcharacterAtIndex:1];
    
                                            constintuc = ((hs -0xd800) *0x400) + (ls -0xdc00) +0x10000;
    
                                            if(0x1d000<= uc && uc <=0x1f77f) {
    
                                                returnValue =YES;
    
                                            }
    
                                        }
    
                                    }elseif(substring.length>1) {
    
                                        constunicharls = [substringcharacterAtIndex:1];
    
                                        if(ls ==0x20e3) {
    
                                            returnValue =YES;
    
                                        }
    
                                    }else{
    
                                        if(0x2100<= hs && hs <=0x27ff) {
    
                                            returnValue =YES;
    
                                        }elseif(0x2B05<= hs && hs <=0x2b07) {
    
                                            returnValue =YES;
    
                                        }elseif(0x2934<= hs && hs <=0x2935) {
    
                                            returnValue =YES;
    
                                        }elseif(0x3297<= hs && hs <=0x3299) {
    
                                            returnValue =YES;
    
                                        }elseif(hs ==0xa9|| hs ==0xae|| hs ==0x303d|| hs ==0x3030|| hs ==0x2b55|| hs ==0x2b1c|| hs ==0x2b1b|| hs ==0x2b50) {
    
                                            returnValue =YES;
    
                                        }
    
                                    }
    
                                }];
    
        returnreturnValue;
    
    }
    

    以下为补充内容,来自http://blog.csdn.net/j_r_k/article/details/78204578
    在限制输入的时候,可能要用到全角转半角或半角转全角的情况。
    至于什么是全角半角,不明白的可以移步这里充一下电。

    全角转半角

    - (NSString *)replaceSpecialWhitespace{  
          NSMutableString *convertedString = [self mutableCopy];  
        CFStringTransform((CFMutableStringRef)convertedString, NULL, kCFStringTransformFullwidthHalfwidth, false);  
          return [NSString stringWithString:convertedString];  
    } 
    

    半角转全角

    - (NSString *)replaceNormalWhiteSpace{  
             NSMutableString *convertedString = [self mutableCopy];  
     CFStringTransform((CFMutableStringRef)convertedString, NULL, kCFStringTransformHiraganaKatakana, false);  
                return [NSString stringWithString:convertedString];  
    }
    

    分割线下的内容,网侵删!

    如有错误,欢迎评论区给予指正!
    如果感觉对你有帮助,别忘了给俺点个赞!

    相关文章

      网友评论

          本文标题:iOS开发之限制中文、英文、数字的输入

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