iOS金额输入限制
程序员文章站
2022-06-07 13:52:00
...
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
UITextField *countTextField = self.moneyTF;
NSString *NumbersWithDot = @".1234567890";
NSString *NumbersWithoutDot = @"1234567890";
// 判断是否输入内容,或者用户点击的是键盘的删除按钮
if (![string isEqualToString:@""]) {
NSCharacterSet *cs;
if ([textField isEqual:countTextField]) {
// 小数点在字符串中的位置 第一个数字从0位置开始
NSInteger dotLocation = [textField.text rangeOfString:@"."].location;
// 判断字符串中是否有小数点
// NSNotFound 表示请求操作的某个内容或者item没有发现,或者不存在
// range.location 表示的是当前输入的内容在整个字符串中的位置,位置编号从0开始
if (dotLocation == NSNotFound ) {
// -- 如果限制非第一位才能输入小数点,加上 && range.location != 0
// 取只包含“myDotNumbers”中包含的内容,其余内容都被去掉
/*
[NSCharacterSet characterSetWithCharactersInString:myDotNumbers]的作用是去掉"myDotNumbers"中包含的所有内容,只要字符串中有内容与"myDotNumbers"中的部分内容相同都会被舍去
在上述方法的末尾加上invertedSet就会使作用颠倒,只取与“myDotNumbers”中内容相同的字符
*/
cs = [[NSCharacterSet characterSetWithCharactersInString:NumbersWithDot] invertedSet];
if (range.location >= 9) {
NSLog(@"单笔金额不能超过亿位");
if ([string isEqualToString:@"."] && range.location == 9) {
return YES;
}
return NO;
}
}else {
cs = [[NSCharacterSet characterSetWithCharactersInString:NumbersWithoutDot] invertedSet];
}
// 按cs分离出数组,数组按@""分离出字符串
NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
BOOL basicTest = [string isEqualToString:filtered];
if (!basicTest) {
NSLog(@"只能输入数字和小数点");
return NO;
}
if (dotLocation != NSNotFound && range.location > dotLocation + 2) {
NSLog(@"小数点后最多两位");
return NO;
}
if (textField.text.length > 11) {
return NO;
}
}
}
return YES;
}
下一篇: C# wpf 自定义路由事件
推荐阅读
-
EditText实现输入限制和校验功能实例代码
-
解决iOS7上UITextField限制字数输入导致崩溃问题的方法
-
Excel输入大写数字将小写的数字全部变成严格的大写金额
-
微信中使用popup等弹窗组件时点击输入框input键盘弹起导致IOS中按钮无效处理办法
-
js限制输入框只能输入数字(onkeyup触发)
-
js限制input只能输入有效的数字(第一个不能是小数点)
-
ios下iframe页面内的input手机输入法bug情况分析
-
Android EditText限制输入字符的方法总结
-
利用Angular.js限制textarea输入的字数
-
Textarea输入字数限制实例(兼容iOS&安卓)