<pre name="code" class="objc">#define myDotNumbers @"0123456789.\n" //匹配金额
#define myNumbers @"0123456789\n" //匹配数字
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSCharacterSet *cs;
if ([textField isEqual:_accountMoney]) {
NSScanner * scanner = [NSScanner scannerWithString:string];
NSRange pointRange = [textField.text rangeOfString:@"."];
if ((pointRange.length > 0 ) && (pointRange.location < range.location || pointRange.location > range.location + range.length)) {
cs = [NSCharacterSet characterSetWithCharactersInString:myNumbers];
}
else {
cs = [NSCharacterSet characterSetWithCharactersInString:myDotNumbers];
}
if ( [textField.text isEqualToString:@""] && [string isEqualToString:@"."]) {
return NO;
}
short remain = 2;
NSString * tempStr = [textField.text stringByAppendingString:string];
NSUInteger strlen = [tempStr length];
if (pointRange.length > 0 && pointRange.location > 0) {
if ([string isEqualToString:@"."]) {
return NO;
}
if (strlen > 0 && (strlen - pointRange.location) > remain + 1) {
return NO;
}
}
NSRange zeroRange = [textField.text rangeOfString:@"0"];
if (zeroRange.length == 1 && zeroRange.location == 0 ) {
if (![string isEqualToString:@"0"] && ![string isEqualToString:@"."] && [textField.text length] == 1) {
textField.text = string;
return NO;
}
else {
if (pointRange.length == 0 && pointRange.location > 0 ) {
if ([string isEqualToString:@"0"]) {
return NO;
}
}
}
}
NSString * buffer;
if (![scanner scanCharactersFromSet:cs intoString:&buffer] && ([string length] != 0 )) {
return NO;
}
}
return YES;
}