问题描述:
项目中,
1.textView的text必须不能以"开头,否则后台数据库会报error.
所以针对这情况,前端需要自行处理,用户输入的字符串不能以"开头。如果以"开头就删掉。
针对已经有双引号开头的字符串:
NSString *oneStr;
if (textView.text.length >0) {
oneStr = [NSString stringWithFormat:@"%@",[textView.text substringToIndex:1]];
if ([oneStr isEqualToString:@"\""] || [oneStr isEqualToString:@"\“"]) {
textView.text = [textView.text substringFromIndex:1];
}
}
针对开头输入的双引号:
if (textView.text.length == 0 && string.length > 0) {//first char
oneStr = [NSString stringWithFormat:@"%@",[string substringToIndex:1]];
if ([oneStr isEqualToString:@"\""] || [oneStr isEqualToString:@"\“"]) {
string = [string substringFromIndex:1];
return NO;
}
}
神坑就出现在调试的时候,用iPad输入”测试的时候,一直不会走第二段逻辑。
果断打断点用Po调试:
为啥false这双引号看着都一样,可问啥就是不会进入此分支呢?
是不是中文的双引号有啥问题呢?继续测:
中文左右双引号将log拷贝到其他编辑器中:
(lldb) po [textView.text subString:24 toIndex:25];
”
(lldb) po [textView.text subString:25 toIndex:26];
“
瞬间了然。
其实造成这个困惑的主要原因是Xcode中,中文输入法看起来不区分“”,如图:
Xcode中的双引号鲁迅说过:搞清楚问题是解决问题的一半!
最终版本:
数组“”为啥数组的后两个元素看着一样呢??? 默念三遍:绝对不一样,绝对不一样,绝对不一样!以下为证:
NSString*oneStr;
NSArray*specialArray =@[@"\"",@"”",@"“"];//chinaChar” “
if(textView.text.length>0) {
textView.text = [textView.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
oneStr = [NSStringstringWithFormat:@"%@",[textView.textsubstringToIndex:1]];
if([specialArraycontainsObject:oneStr]) {
textView.text= [textView.textsubstringFromIndex:1];
}
}
if (range.location == 0 && string.length > 0) {
if(string.length>0) {
oneStr = [NSStringstringWithFormat:@"%@",[stringsubstringToIndex:1]];
if([specialArraycontainsObject:oneStr]) {
string = [stringsubstringFromIndex:1];
returnNO;
}
}
}
总结:
1.在用subStringtoIndex:方法之前,最好去除一下String开头的空格,因为用户可能会无意中多输入一个空格。
2.如何定位textView中的是首个字符?应该用range.location == 0来判断,而不是textView.text.length == 0。因为用户完全可能手动移动光标。
网友评论