溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Objective-C中利用正則去除非數(shù)字字母漢字方法實(shí)例

發(fā)布時(shí)間:2020-08-27 14:09:47 來源:腳本之家 閱讀:187 作者:東引甌越 欄目:移動(dòng)開發(fā)

前言

今天碰到個(gè)需求,PM要求輸入框中取出非字母數(shù)字漢字的輸入.

Objective-C中利用正則去除非數(shù)字字母漢字方法實(shí)例

帶著這個(gè)疑問開始今天的文章

準(zhǔn)備工作

創(chuàng)建個(gè)demo 代碼如下

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UITextField *input;
@property (weak, nonatomic) IBOutlet UILabel *label;
@end
@implementation ViewController
- (void)viewDidLoad {
 [super viewDidLoad];
 self.input.delegate = self;
 [self.input addTarget:self action:@selector(textChange:) forControlEvents:UIControlEventEditingChanged];
}
//當(dāng)文本內(nèi)容改變時(shí)調(diào)用
- (void)textChange:(UITextField *)textField
{
 //這里調(diào)用相關(guān)方法過濾字符串顯示出來
 self.label.text = //...;
}

在網(wǎng)上找了一圈大多都是使用謂詞去判斷時(shí)候包含,沒有幾個(gè)給出相應(yīng)的處理字符串.

我找到了3種 處理字符串的方式

  • 方案1 使用謂詞過濾
  • 方案2 使用正則過濾增加尋找的字符串長度
  • 方案3 使用正則精簡過濾字符串

方案1

- (NSString *)filterString1:(NSString *)str {
 NSString *regex = @"^[a-zA-Z0-9\u4e00-\u9fa5]+";
 NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
 NSMutableString * retStr = [NSMutableString string];
 for(NSInteger i=0; i< [str length];i++){
  NSRange range = NSMakeRange(i, 1);
  NSString *character = [str substringWithRange:range];
  if([pred evaluateWithObject:character])
  {
   [retStr appendString:character];
  }
 }
 return retStr;
}

這種方式雖然能實(shí)現(xiàn) 但是代碼略顯冗長,不過能就解決問題

//方案2
- (NSString *)filterString2:(NSString *)str {
 NSString *regex = @"[^a-zA-Z0-9\u4e00-\u9fa5]";
 NSMutableString *mstr = [NSMutableString stringWithFormat:@"%@", str];
 NSUInteger i = [mstr replaceOccurrencesOfString:regex withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, mstr.length)];
 return [NSString stringWithFormat:@"%@-長度:%zd",mstr,i];
}

同樣的方法使用正則replaceOccurrencesOfString:withString:options:range:方法替換字符串

下面我們精簡到2行代碼

//方案3
- (NSString *)filterString3:(NSString *)str {
 NSString *regex = @"[^a-zA-Z0-9\u4e00-\u9fa5]";
 return [str stringByReplacingOccurrencesOfString:regex withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, str.length)];
}

最終方案3 得到的預(yù)期結(jié)果還是不錯(cuò),推薦使用

總結(jié)

有些問題都是在工作中遇到,希望記錄下來一起分享和學(xué)習(xí).

源碼下載:

Demo在這里 (本地下載)

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI