我已尝试使用此代码,如下所示
这有助于我允许用户输入仅限数字和点(小数点)
但问题是用户可以在此方法中允许n个小数。
我想只允许一个小数
并且在decima之后只有两位数
如123.00,123423432353.99 但不喜欢123.4.4,123.12345,123 ...... 23
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
if (string.length == 0) {
return YES;
}
NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789."];
for (int i = 0; i < [string length]; i++) {
unichar c = [string characterAtIndex:i];
if ([myCharSet characterIsMember:c]) {
return YES;
}
}
UIAlertView *av = [[UIAlertView alloc] initWithTitle:nil message:@"Invalid input" delegate:self cancelButtonTitle:@"Dismiss" otherButtonTitles:nil];
[av show];
return NO;
}
如何允许用户只输入一个十进制文本字段,该字段也只允许小数点后的两位数
提前致谢
答案 0 :(得分:5)
最佳做法每当您必须执行任何字符串格式验证时,请使用RegularExpressions,例如电子邮件,电话号码,货币等
这肯定会解决您的问题。以下示例代码:
首先创建NSRegularExpression的实例
NSError error;
NSRegularExpression * regExp = [[NSRegularExpression alloc]initWithPattern:@"^\\d{0,10}(([.]\\d{1,2})|([.]))?$" options:NSRegularExpressionCaseInsensitive error:&error];
然后使用您的相关方法:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSString * existingText = textField.text;
NSString * completeText = [existingText stringByAppendingFormat:@"%@",string];
if ([regExp numberOfMatchesInString:completeText options:0 range:NSMakeRange(0, [completeText length])])
{
if ([completeText isEqualToString:@"."])
[textField insertText:@"0"];
return YES;
}
else
return NO;
}
使用并告诉我它是否有效。
答案 1 :(得分:1)
请尝试使用这个......它可以帮助您并且请实现您的功能。此代码仅在“。”之后的2位数。
NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
NSArray *sep = [newString componentsSeparatedByString:@"."];
if([sep count]>=2)
{
NSString *sepStr=[NSString stringWithFormat:@"%@",[sep objectAtIndex:1]];
return !([sepStr length]>2);
}
return YES;