輸入框限制輸入表情

  前些日子寫項目,測試提出要求要禁止表情的錄入,在UITextField這個代理方法中shouldChangeCharactersInRange,只可以限制鍵盤上的表情不能錄入,可是錄入時聯想上的表情仍是可以錄入,因此最終用了下邊的方法,可是可能還會有問題。數據庫

  究其緣由,測試說防止數據庫的表被注入什麼的,可是我感受這些活是後臺要作的,後臺直接拿傳入的字符串直接做爲數據庫的查詢條件,確定會有問題的,可是惹不起測試 ,只可以作了限制了!若是有更好的辦法,歡迎指正。測試

- (void)viewDidLoad {代理

    [super viewDidLoad];server

    

    [[NSNotificationCenter defaultCenter]addObserver:selfci

                                            selector:@selector(textDidChange:)rem

                                                name:UITextFieldTextDidChangeNotification字符串

                                              object:nil];string

}it

 

- (void)textDidChange:(NSNotification*)nf{io

    UITextField *tf = (UITextField*)nf.object;

    NSString *string  = [self filterEmoji:tf.text];

    if (string) {

        tf.text = string;

    }

}

 

- (NSString*)filterEmoji:(NSString*)text{

    

    NSError *error = nil;

    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[^\\u0020-\\u007E\\u00A0-\\u00BE\\u2E80-\\uA4CF\\uF900-\\uFAFF\\uFE30-\\uFE4F\\uFF00-\\uFFEF\\u0080-\\u009F\\u2000-\\u201f\r\n]" options:NSRegularExpressionUseUnixLineSeparators error:&error];

    NSString *modifiedString = [regex stringByReplacingMatchesInString:text

                                                               options:0

                                                                 range:NSMakeRange(0, [text length])

                                                          withTemplate:@""];

    

    if (![modifiedString isEqualToString:text]) {        

        return modifiedString;        

    }else{        

        return nil;

    }

}

//在此要幹掉通知

-(void)dealloc{  

    [[NSNotificationCenter defaultCenter] removeObserver:self];

}

相關文章
相關標籤/搜索