g.r*_*ion 82 validation cocoa-touch objective-c nsstring uitextfield
如何验证字符串输入UITextField?我想检查字符串是否为数字,包括小数点.
Don*_*air 115
您可以通过以下几行来完成:
BOOL valid;
NSCharacterSet *alphaNums = [NSCharacterSet decimalDigitCharacterSet];
NSCharacterSet *inStringSet = [NSCharacterSet characterSetWithCharactersInString:myInputField.text];
valid = [alphaNums isSupersetOfSet:inStringSet];
if (!valid) // Not numeric
Run Code Online (Sandbox Code Playgroud)
- 这是用于验证输入仅为数字字符.查看NSCharacterSet其他选项的文档.您可以使用characterSetWithCharactersInString指定任何有效输入字符集.
Dav*_*ong 72
有几种方法可以做到这一点:
nil.IMO,使用类似-[NSString doubleValue]将不会是最好的选择,因为两者@"0.0"并@"abc"会有一个0的doubleValue的*值的方法都返回0,如果他们不能将字符串正确转换,所以这将是一个很难区分合法字符串@"0"和无效字符串.像C的strtol功能会有同样的问题.
我认为使用NSNumberFormatter是最好的选择,因为它考虑了区域设置(即@"1,23"欧洲的数字,而@"1.23"美国的数字).
Pet*_*wis 34
我在我的Mac应用程序中使用此代码,相同或类似的应该与iPhone一起使用.它基于RegexKitLite正则表达式,并在无效时将文本变为红色.
static bool TextIsValidValue( NSString* newText, double &value )
{
bool result = false;
if ( [newText isMatchedByRegex:@"^(?:|0|[1-9]\\d*)(?:\\.\\d*)?$"] ) {
result = true;
value = [newText doubleValue];
}
return result;
}
- (IBAction) doTextChanged:(id)sender;
{
double value;
if ( TextIsValidValue( [i_pause stringValue], value ) ) {
[i_pause setTextColor:[NSColor blackColor]];
// do something with the value
} else {
[i_pause setTextColor:[NSColor redColor]];
}
}
Run Code Online (Sandbox Code Playgroud)
Fra*_*rar 19
如果您希望仅允许用户输入数字,则可以使ViewController实现UITextFieldDelegate的一部分并定义此方法:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSString *resultingString = [textField.text stringByReplacingCharactersInRange: range withString: string];
// The user deleting all input is perfectly acceptable.
if ([resultingString length] == 0) {
return true;
}
NSInteger holder;
NSScanner *scan = [NSScanner scannerWithString: resultingString];
return [scan scanInteger: &holder] && [scan isAtEnd];
}
Run Code Online (Sandbox Code Playgroud)
可能有更有效的方法,但我发现这是一种非常方便的方式.并且该方法应该很容易适用于验证双打或其他:只需使用scanDouble:或类似的.
kal*_*ani 13
#pragma mark - UItextfield Delegate
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if ([string isEqualToString:@"("]||[string isEqualToString:@")"]) {
return TRUE;
}
NSLog(@"Range ==%d ,%d",range.length,range.location);
//NSRange *CURRANGE = [NSString rangeOfString:string];
if (range.location == 0 && range.length == 0) {
if ([string isEqualToString:@"+"]) {
return TRUE;
}
}
return [self isNumeric:string];
}
-(BOOL)isNumeric:(NSString*)inputString{
BOOL isValid = NO;
NSCharacterSet *alphaNumbersSet = [NSCharacterSet decimalDigitCharacterSet];
NSCharacterSet *stringSet = [NSCharacterSet characterSetWithCharactersInString:inputString];
isValid = [alphaNumbersSet isSupersetOfSet:stringSet];
return isValid;
}
Run Code Online (Sandbox Code Playgroud)
小智 11
以下是几个单行结合Peter Lewis的上述答案(检查UITextField的输入是否只是数字)和NSPredicates
#define REGEX_FOR_NUMBERS @"^([+-]?)(?:|0|[1-9]\\d*)(?:\\.\\d*)?$"
#define REGEX_FOR_INTEGERS @"^([+-]?)(?:|0|[1-9]\\d*)?$"
#define IS_A_NUMBER(string) [[NSPredicate predicateWithFormat:@"SELF MATCHES %@", REGEX_FOR_NUMBERS] evaluateWithObject:string]
#define IS_AN_INTEGER(string) [[NSPredicate predicateWithFormat:@"SELF MATCHES %@", REGEX_FOR_INTEGERS] evaluateWithObject:string]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
103270 次 |
| 最近记录: |