NSCharacter?Set的學(xué)習(xí)

項(xiàng)目需求:在價(jià)格輸入框中只能輸入數(shù)字和小數(shù)點(diǎn),有位數(shù)控制,且只能輸入兩位小數(shù)。

自己研究了網(wǎng)上提供的方法,多數(shù)是用NSCharacterSet來查找并控制輸入的字符,本人對(duì)NSCharacterSet類不是很了解,就總結(jié)了下,供以后方便翻看。

NSCharacterSet介紹

NSCharacterSet ,以及它的可變版本NSMutableCharacterSet,用面向?qū)ο蟮姆绞絹肀硎疽唤MUnicode字符。它經(jīng)常與NSString及NSScanner組合起來使用,在不同的字符上做過濾、刪除或者分割操作。另外,NSCharacterset是無需字符集合,主要用來判斷已知字符串是否包含制定字符集,而不可以用來保存字符串。

NSCharacterSet的各個(gè)枚舉類型的含義如下:

controlCharacterSet//控制符
whitespaceCharacterSet//空格
whitespaceAndNewlineCharacterSet//空格換行
decimalDigitCharacterSet//小數(shù)
letterCharacterSet//文字
lowercaseLetterCharacterSet//小寫字母
uppercaseLetterCharacterSet//大寫字母
nonBaseCharacterSet//非基礎(chǔ)
alphanumericCharacterSet//字母數(shù)字
decomposableCharacterSet//可分解
illegalCharacterSet//非法
punctuationCharacterSet//標(biāo)點(diǎn)
capitalizedLetterCharacterSet//大寫
symbolCharacterSet//符號(hào)
newlineCharacterSet//換行符

網(wǎng)上有很多利用NSCharacterSet類去除或替換字符串中的空格或者指定字符,這里不再探討,想要學(xué)習(xí)的話可以看下邊的參考文檔;和NSString類的切割和拼接一起使用可以達(dá)到想要的效果。

這里我只貼出解決項(xiàng)目需求的代碼來和大家一起學(xué)習(xí),筆者用的是OC語言做開發(fā)。

1.聲明宏
#define myDotNumbers @"0123456789.\n"
#define myNumbers @"0123456789\n"
2.實(shí)現(xiàn)方法
實(shí)現(xiàn)UITextField的代理方法
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{

if ([textField.text isEqualToString:@"0"] && [string isEqualToString:@"0"]) {//不能連續(xù)輸入兩個(gè)以上的零
    return NO;
}
if ([textField.text length] == 0 && [string isEqualToString:@"."]) {//首位不能輸入.
    return NO;
}
if ([string isEqualToString:@"\n"]||[string isEqualToString:@""]) {//按下return
    return YES;
}
NSCharacterSet *cs;
NSUInteger nDotLoc = [textField.text rangeOfString:@"."].location;
if (NSNotFound == nDotLoc && 0 != range.location) {
    cs = [[NSCharacterSet characterSetWithCharactersInString:myNumbers]invertedSet];
    if ([string isEqualToString:@"."]) {
        return YES;
    }
    if (textField.text.length>=8) {  //小數(shù)點(diǎn)前面8位
        return NO;
    }
}
else {
    cs = [[NSCharacterSet characterSetWithCharactersInString:myDotNumbers]invertedSet];//invertedSet方法是去反字符,把所有的除了kNumber里的字符都找出來(包含去空格功能)
    if([string isEqualToString:@"."]){
        return NO;
    }
    if (textField.text.length>=11) {
        return  NO;
    }
}
NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
BOOL basicTest = [string isEqualToString:filtered];
if (!basicTest) {
    return NO;
}
if (NSNotFound != nDotLoc && range.location > nDotLoc +2) {//小數(shù)點(diǎn)后面兩位
    return NO;
}
return YES;
}

參考文檔:
NSCharacter?Set
NSCharacterSet
NSCharacterSet的使用
蘋果官方文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容