過濾掉蘋果系統(tǒng)自帶的表情及某些第三方表情,并解決使用九宮格的限制

pragma mark -------UITextViewDelegate

-(BOOL) textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
if ([textView isFirstResponder]) {

        if ([[[textView textInputMode] primaryLanguage] isEqualToString:@"emoji"] || ![[textView textInputMode] primaryLanguage]) {
               return NO;
        }
        
        //判斷鍵盤是不是九宮格鍵盤
        if ([self isNineKeyBoard:text] ){
            return YES;
        }else{
            if ([self hasEmoji:text] || [self stringContainsEmoji:text]){
                return NO;
            }
        }
    }
    return YES;
}
/**
 * 利用下面這個方法stringContainsEmoji可以限制系統(tǒng)鍵盤自帶的表情
 *  判斷字符串中是否存在emoji
 * @param string 字符串
 * @return YES(含有表情)
 */
  • (BOOL)stringContainsEmoji:(NSString *)string {

    __block BOOL returnValue = NO;

    [string enumerateSubstringsInRange:NSMakeRange(0, [string length]) options:NSStringEnumerationByComposedCharacterSequences usingBlock:
    ^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {

       const unichar hs = [substring characterAtIndex:0];
       // surrogate pair
       if (0xd800 <= hs && hs <= 0xdbff) {
           if (substring.length > 1) {
               const unichar ls = [substring characterAtIndex:1];
               const int uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000;
               if (0x1d000 <= uc && uc <= 0x1f77f) {
                   returnValue = YES;
               }
           }
       } else if (substring.length > 1) {
           const unichar ls = [substring characterAtIndex:1];
           if (ls == 0x20e3) {
               returnValue = YES;
           }
           
       } else {
           // non surrogate
           if (0x2100 <= hs && hs <= 0x27ff) {
               returnValue = YES;
           } else if (0x2B05 <= hs && hs <= 0x2b07) {
               returnValue = YES;
           } else if (0x2934 <= hs && hs <= 0x2935) {
               returnValue = YES;
           } else if (0x3297 <= hs && hs <= 0x3299) {
               returnValue = YES;
           } else if (hs == 0xa9 || hs == 0xae || hs == 0x303d || hs == 0x3030 || hs == 0x2b55 || hs == 0x2b1c || hs == 0x2b1b || hs == 0x2b50) {
               returnValue = YES;
           }
       }
    

    }];

    return returnValue;
    }
    /**

    • 利用下面這個方法hasEmoji可以限制第三方鍵盤(常用的是搜狗鍵盤)的表情
    • 判斷字符串中是否存在emoji
    • @param string 字符串
    • @return YES(含有表情)
      */
  • (BOOL)hasEmoji:(NSString*)string;
    {
    NSString pattern = @"[^\u0020-\u007E\u00A0-\u00BE\u2E80-\uA4CF\uF900-\uFAFF\uFE30-\uFE4F\uFF00-\uFFEF\u0080-\u009F\u2000-\u201f\r\n]";
    NSPredicate pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];
    BOOL isMatch = [pred evaluateWithObject:string];
    return isMatch;
    }
    /

    • 利用下面這個方法isNineKeyBoard可以判斷當(dāng)前是不是在使用九宮格輸入
    • 判斷是不是九宮格
    • @param string 輸入的字符
    • @return YES(是九宮格拼音鍵盤)
      */
      -(BOOL)isNineKeyBoard:(NSString *)string
      {
      NSString *other = @"????????";
      int len = (int)string.length;
      for(int i=0;i<len;i++)
      {
      if(!([other rangeOfString:string].location != NSNotFound))
      return NO;
      }
      return YES;
      }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末妒茬,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌弓千,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件献起,死亡現(xiàn)場離奇詭異洋访,居然都是意外死亡镣陕,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門姻政,熙熙樓的掌柜王于貴愁眉苦臉地迎上來呆抑,“玉大人,你說我怎么就攤上這事扶歪±矸危” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵善镰,是天一觀的道長妹萨。 經(jīng)常有香客問我,道長炫欺,這世上最難降的妖魔是什么乎完? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮品洛,結(jié)果婚禮上树姨,老公的妹妹穿的比我還像新娘。我一直安慰自己桥状,他們只是感情好帽揪,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著辅斟,像睡著了一般转晰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上士飒,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天查邢,我揣著相機與錄音,去河邊找鬼酵幕。 笑死扰藕,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的芳撒。 我是一名探鬼主播邓深,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼笔刹!你這毒婦竟也來了芥备?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤徘熔,失蹤者是張志新(化名)和其女友劉穎门躯,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體酷师,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡讶凉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年染乌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片懂讯。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡荷憋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出褐望,到底是詐尸還是另有隱情勒庄,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布瘫里,位于F島的核電站实蔽,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏谨读。R本人自食惡果不足惜局装,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望劳殖。 院中可真熱鬧铐尚,春花似錦、人聲如沸哆姻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽矛缨。三九已至爹脾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間劳景,已是汗流浹背誉简。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工碉就, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留盟广,地道東北人。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓晤斩,卻偏偏與公主長得像就乓,于是被迫代替她去往敵國和親筋遭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容