目前的開發(fā)的項目中有限制字符輸入的需求捷凄,趁此機會整理一下這個知識點丹墨。
1 嚴(yán)格限制輸入中文。中文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 嚴(yán)格限制輸入英文字母
英文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 嚴(yán)格限制輸入數(shù)字产喉。數(shù)字的unicode范圍是 0030-0039
- (BOOL)isNumber:(NSString*)source {
NSString *regex = @"^[\\u0030-\\u0039]+$";
return ([source rangeOfString:regex options:NSRegularExpressionSearch].length>0);
}
以上方法僅是一種解決問題的思路析珊,僅供參考。
在實際的情況中蜈块,往往不會是這么嚴(yán)格的限定鉴腻∶陨龋空格,標(biāo)點符號你總得讓用戶去輸入吧爽哎!所以蜓席,這個時候,在做限制的時候就要考慮到其他的情況课锌。要不然用戶該罵娘了厨内!最重要的是,你下個月的“五險一金”可能要換個老板給你交了产镐!
--------------------------- 分割線 ---------------------------
下面附上限制輸入Emoji的方法隘庄,來自http://www.reibang.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;
}
以下為補充內(nèi)容,來自http://blog.csdn.net/j_r_k/article/details/78204578
在限制輸入的時候癣亚,可能要用到全角轉(zhuǎn)半角或半角轉(zhuǎn)全角的情況丑掺。
至于什么是全角半角,不明白的可以移步這里充一下電述雾。
全角轉(zhuǎn)半角
- (NSString *)replaceSpecialWhitespace{
NSMutableString *convertedString = [self mutableCopy];
CFStringTransform((CFMutableStringRef)convertedString, NULL, kCFStringTransformFullwidthHalfwidth, false);
return [NSString stringWithString:convertedString];
}
半角轉(zhuǎn)全角
- (NSString *)replaceNormalWhiteSpace{
NSMutableString *convertedString = [self mutableCopy];
CFStringTransform((CFMutableStringRef)convertedString, NULL, kCFStringTransformHiraganaKatakana, false);
return [NSString stringWithString:convertedString];
}
分割線下的內(nèi)容街州,網(wǎng)侵刪!
如有錯誤玻孟,歡迎評論區(qū)給予指正唆缴!
如果感覺對你有幫助,別忘了給俺點個贊黍翎!