UITextField限制輸入兩位小數

swift版本限制金額輸入(兩位小數)

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    
    if string == "." && textField.text?.count == 0 {
            textField.text = "0."
        }
        let newString = (textField.text! as NSString).replacingCharacters(in: range, with: string)
        let expression = "^[0-9]*((\\.|,)[0-9]{0,2})?$"
        let regex = try! NSRegularExpression(pattern: expression, options: NSRegularExpression.Options.allowCommentsAndWhitespace)
        let numberOfMatches = regex.numberOfMatches(in: newString, options:NSRegularExpression.MatchingOptions.reportProgress, range: NSMakeRange(0, (newString as NSString).length))
        return numberOfMatches != 0
}

OC版本限制金額輸入

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:      (NSString *)string{
//    限制只能輸入數字
BOOL isHaveDian = YES;
if ([string isEqualToString:@" "]) {
    return NO;
}

if ([textField.text rangeOfString:@"."].location == NSNotFound) {
    isHaveDian = NO;
}
if ([string length] > 0) {
    
    unichar single = [string characterAtIndex:0];//當前輸入的字符
    if ((single >= '0' && single <= '9') || single == '.') {//數據格式正確
        
        if([textField.text length] == 0){
            if(single == '.') {
                
                [textField.text stringByReplacingCharactersInRange:range withString:@""];
                return NO;
            }
        }
        
        //輸入的字符是否是小數點
        if (single == '.') {
            if(!isHaveDian)//text中還沒有小數點
            {
                isHaveDian = YES;
                return YES;
                
            }else{
                
                [textField.text stringByReplacingCharactersInRange:range withString:@""];
                return NO;
            }
        }else{
            if (isHaveDian) {//存在小數點
                
                //判斷小數點的位數
                NSRange ran = [textField.text rangeOfString:@"."];
                if (range.location - ran.location <= 2) {
                    return YES;
                }else{
                    
                    return NO;
                }
            }else{
                return YES;
            }
        }
    }else{//輸入的數據格式不正確
        
        [textField.text stringByReplacingCharactersInRange:range withString:@""];
        return NO;
    }
}
else
{
    return YES;
}

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容