_walletNameTextField = [[CommonTextField alloc] initWithText:nil placeHolder:NSLocalizedString(@"设置钱包名称(不超过25个字符)", nil)];
[_walletNameTextField addTarget:self action:@selector(textFiledDidChanged:) forControlEvents:UIControlEventEditingChanged];
- (void)textFiledDidChanged:(UITextField *)textField {
if (kMaxNumber == 0)
return;
NSString *toBeString = textField.text;
NSString *lang = [[textField textInputMode] primaryLanguage];
if ([lang isEqualToString:@"zh-Hans"]) {
UITextRange *selectedRange = [textField markedTextRange];
UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
if (!position) {
if ([toBeString getStringLenthOfBytes] > kMaxNumber) {
textField.text = [toBeString subBytesOfstringToIndex:kMaxNumber];
}
}
} else {
if ([toBeString getStringLenthOfBytes] > kMaxNumber) {
textField.text = [toBeString subBytesOfstringToIndex:kMaxNumber];
}
}
}
#define kMaxNumber 25
- (NSInteger)getStringLenthOfBytes {
NSInteger length = 0;
for (int i = 0; i < [self length]; i++) {
NSString *s = [self substringWithRange:NSMakeRange(i, 1)];
if ([self validateChineseChar:s]) {
length += 2;
} else {
length += 1;
}
}
return length;
}
- (NSString *)subBytesOfstringToIndex:(NSInteger)index {
NSInteger length = 0;
NSInteger chineseNum = 0;
NSInteger zifuNum = 0;
for (int i = 0; i < [self length]; i++) {
NSString *s = [self substringWithRange:NSMakeRange(i, 1)];
if ([self validateChineseChar:s]) {
if (length + 2 > index) {
return [self substringToIndex:chineseNum + zifuNum];
}
length += 2;
chineseNum += 1;
} else {
if (length + 1 > index) {
return [self substringToIndex:chineseNum + zifuNum];
}
length += 1;
zifuNum += 1;
}
}
return [self substringToIndex:index];
}
- (BOOL)validateChineseChar:(NSString *)string {
NSString *nameRegEx = @"[\\u0391-\\uFFE5]";
if (![string isMatchesRegularExp:nameRegEx]) {
return NO;
}
return YES;
}
- (BOOL)validateChinese:(NSString *)string {
NSString *nameRegEx = @"[\u4e00-\u9fa5]";
if (![string isMatchesRegularExp:nameRegEx]) {
return NO;
}
return YES;
}
- (BOOL)isMatchesRegularExp:(NSString *)regex {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
return [predicate evaluateWithObject:self];
}