在項(xiàng)目開(kāi)發(fā)中镐侯,經(jīng)常會(huì)遇到限制文本框輸入內(nèi)容的需求侦讨,這就涉及到對(duì)字符串的處理,而對(duì)字符串的處理問(wèn)題苟翻,正則表達(dá)式是一個(gè)利器韵卤,今天就用正則表達(dá)式來(lái)實(shí)現(xiàn)限制UITextField兩位小數(shù)的輸入。
在UITextField的代理方法中進(jìn)行操作:
//參數(shù)一:range袜瞬,要被替換的字符串的range怜俐,如果是新輸入的身堡,就沒(méi)有字符串被替換邓尤,range.length = 0
//參數(shù)二:替換的字符串,即鍵盤即將輸入或者即將粘貼到textField的string
//返回值為BOOL類型贴谎,YES表示允許替換汞扎,NO表示不允許
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string
{
//新輸入的
if (string.length == 0) {
return YES;
}
//第一個(gè)參數(shù),被替換字符串的range
//第二個(gè)參數(shù)擅这,即將鍵入或者粘貼的string
//返回的是改變過(guò)后的新str澈魄,即textfield的新的文本內(nèi)容
NSString *checkStr = [textField.text stringByReplacingCharactersInRange:range withString:string];
//正則表達(dá)式(只支持兩位小數(shù))
NSString *regex = @"^\\-?([1-9]\\d*|0)(\\.\\d{0,2})?$";
//判斷新的文本內(nèi)容是否符合要求
return [self isValid:checkStr withRegex:regex];
}
//檢測(cè)改變過(guò)的文本是否匹配正則表達(dá)式,如果匹配表示可以鍵入仲翎,否則不能鍵入
- (BOOL) isValid:(NSString*)checkStr withRegex:(NSString*)regex
{
NSPredicate *predicte = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];
return [predicte evaluateWithObject:checkStr];
}
解釋的很詳細(xì)痹扇,是不是超簡(jiǎn)單,幾行代碼就能搞定溯香。
給大家推薦一下學(xué)習(xí)正則入門的一篇不錯(cuò)的鏈接鲫构,30分鐘入門,對(duì)于剛接觸正則的朋友來(lái)說(shuō)玫坛,很適合