目前的开发的项目中有限制字符输入的需求,趁此机会整理一下这个知识点。
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];
}
分割线下的内容,网侵删!
如有错误,欢迎评论区给予指正!
如果感觉对你有帮助,别忘了给俺点个赞!