1. 程式人生 > ><iOS小技巧> 昵稱格式判斷

<iOS小技巧> 昵稱格式判斷

方法 != 需要 字符長度 osi nsobject substr 兩個 war

一、使用方式

+ 如下代碼塊功能:判斷字體,判斷字體輸入格式 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.判斷是否包含表情字符的方法,我設計的合理麽?是否會存在一些問題?你有沒有更簡潔的方法?

<iOS小技巧> 昵稱格式判斷