[_nameField addTarget:self action:@selector(limitLength:) forControlEvents:UIControlEventEditingChanged];
// 限制字数,区别中英文
- (void)limitLength:(UITextField *)sender
{
bool isChinese;//判断当前输入法是否是中文
if ([[[UITextInputMode currentInputMode] primaryLanguage] isEqualToString: @"en-US"]) {
isChinese = false;
}
else
{
isChinese = true;
}
if(sender == _nameField) {
// 8位
NSString *str = [[_nameField text] stringByReplacingOccurrencesOfString:@"?" withString:@""];
str = [self disable_emoji:str];
if (isChinese) { //中文输入法下
UITextRange *selectedRange = [_nameField markedTextRange];
//获取高亮部分
UITextPosition *position = [_nameField positionFromPosition:selectedRange.start offset:0];
// 没有高亮选择的字,则对已输入的文字进行字数统计和限制
if (!position) {
DLog(@"汉字");
if ( str.length>=kMaxCount) {
NSString *strNew = [NSString stringWithString:str];
[_nameField setText:[strNew substringToIndex:kMaxCount]];
} else {
[_nameField setText:str];
}
}
else {
DLog(@"输入的英文还没有转化为汉字的状态");
}
}else{
DLog(@"str=%@; 本次长度=%d",str,[str length]);
if ([str length]>=kMaxCount) {
NSString *strNew = [NSString stringWithString:str];
[_nameField setText:[strNew substringToIndex:kMaxCount]];
}
}
}
}
- (
void
)textViewDidChange:(
UITextView
*)textView
{
NSRange
textRange = [textView
selectedRange
];
[textView
setText
:[
self
disable_emoji
:[textView
text
]]];
[textView
setSelectedRange
:textRange];
}
// 详情禁止输入表情符号- (
NSString
*)disable_emoji:(
NSString
*)text
{
NSRegularExpression
*regex = [
NSRegularExpression
regularExpressionWithPattern
:
@"[^\\u0020-\\u007E\\u00A0-\\u00BE\\u2E80-\\uA4CF\\uF900-\\uFAFF\\uFE30-\\uFE4F\\uFF00-\\uFFEF\\u0080-\\u009F\\u2000-\\u201f\r\n]"
options
:
NSRegularExpressionCaseInsensitive
error
:nil
];
NSString
*modifiedString = [regex
stringByReplacingMatchesInString
:text
options
:
0
range
:NSMakeRange(
0
, [text
length
])
withTemplate
:
@""
];
return
modifiedString;
}