我有一個要求驗證一個十進制數,即整數部分可以具有高達5個字符和分數值可以具有高達2個字符。 (分數值是可選的)。我已經嘗試了很多,我最終以低於表達。正則表達式來驗證十進制數
"^([0-9]{0,5})((.|,)[0-9]{0,2})?$"
一切都很好,除了非十進制值(沒有./,存在的地方)。
即。表達接受99999999
任何幫助將不勝感激。
我有一個要求驗證一個十進制數,即整數部分可以具有高達5個字符和分數值可以具有高達2個字符。 (分數值是可選的)。我已經嘗試了很多,我最終以低於表達。正則表達式來驗證十進制數
"^([0-9]{0,5})((.|,)[0-9]{0,2})?$"
一切都很好,除了非十進制值(沒有./,存在的地方)。
即。表達接受99999999
任何幫助將不勝感激。
你的正則表達式的問題是點:如果沒有正確的轉義,點字符('。')將接受除換行符之外的任何字符(請參閱此quick reference)。
爲了表示字面點,你必須用反斜槓轉義它( '\'),那麼你的正則表達式最終看起來像這樣:
"^([0-9]{0,5})((\.|,)[0-9]{0,2})?$"
不會減慢問題 – Rajesh
// trye這樣
- (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;
}
}
這個表達式傳遞
"^([0-9]{0,5}+)?(\\.([0-9]{1,2})?)?$"
謝謝大家誰試圖幫助我。
爲什麼使用正則表達式?使用'NSNumberFormatter'。然後,您可以正確處理來自不同地區的用戶輸入的號碼。 – rmaddy
@rmaddy NSNumberFormatter爲999.999給出了正確的數字,儘管我給了maximumFractionDigits = 2 – Rajesh
你能跟我分享一個例子嗎? – Rajesh