我需要验证十进制数,即整数部分最多可以有5个字符,分数值最多可以有2个字符。 (分数值是可选的)。我已经尝试了很多,我最终得到了以下表达。
"^([0-9]{0,5})((.|,)[0-9]{0,2})?$"
一切都很好,除了非十进制值(没有./,存在)。
即。表达式接受99999999
任何帮助将不胜感激。
答案 0 :(得分:2)
正则表达式的问题是点:没有正确的转义,点字符('。')接受除换行符之外的任何字符(请参阅此quick reference)。
为了表示一个文字点,你必须用反斜杠('\')来转义它,所以你的正则表达式看起来像这样:
{{1}}
答案 1 :(得分:0)
此表达式传递
"^([0-9]{0,5}+)?(\\.([0-9]{1,2})?)?$"
感谢所有尝试帮助我的人。
答案 2 :(得分:-1)
//试试这个
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange: (NSRange)range replacementString:(NSString *)string {
if([string isEqualToString:@""]) {
return YES;
}
if(string.length > 1 ) {
return NO;
}
if ([textField.text rangeOfString:@"."].location != NSNotFound) {
if([string rangeOfString:@"."].location != NSNotFound) {
return NO;
}
NSString *strTemptext = [textField.text stringByReplacingOccurrencesOfString:@"." withString:@"$#"];
NSArray *arrComponants = [strTemptext componentsSeparatedByString:@"$"];
NSString *strText = @"";
if (arrComponants.count > 0) {
if([(NSString *)[arrComponants objectAtIndex:0] containsString:@"#"]) {
strText = [arrComponants objectAtIndex:0];
} else {
strText = [arrComponants objectAtIndex:1];
}
} else {
strText = [arrComponants objectAtIndex:0];
}
if([strText length] >= 3) {
return NO;
}
}
if(textField.text.length >= 5 && [textField.text rangeOfString:@"."].location == NSNotFound && [string rangeOfString:@"."].location == NSNotFound) {
return NO;
}
if( [textField.text rangeOfString:@"."].location != NSNotFound && textField.text.length > 7) {
return NO;
}
return YES;
}
}