3 回答
TA贡献1824条经验 获得超8个赞
我在我的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]];
}
}
TA贡献1805条经验 获得超10个赞
您可以通过以下几行来完成:
BOOL valid;
NSCharacterSet *alphaNums = [NSCharacterSet decimalDigitCharacterSet];
NSCharacterSet *inStringSet = [NSCharacterSet characterSetWithCharactersInString:myInputField.text];
valid = [alphaNums isSupersetOfSet:inStringSet];
if (!valid) // Not numeric
- 这是用于验证输入仅为数字字符。查看NSCharacterSet其他选项的文档。您可以使用characterSetWithCharactersInString指定任何有效输入字符集。
TA贡献1786条经验 获得超11个赞
有几种方法可以做到这一点:
使用NSNumberFormatter的numberFromString:方法。如果它可以正确解析字符串,或者不能解析字符串,则返回NSNumber
nil
。使用NSScanner
删除任何非数字字符并查看字符串是否仍然匹配
使用正则表达式
IMO,使用类似-[NSString doubleValue]
将不会是最好的选择,因为两者@"0.0"
并@"abc"
会有一个0的doubleValue的*值的方法都返回0,如果他们不能将字符串正确转换,所以这将是一个很难区分合法字符串@"0"
和无效字符串。像C的strtol
功能会有同样的问题。
我认为使用NSNumberFormatter是最好的选择,因为它考虑了区域设置(即@"1,23"
欧洲的数字,而@"1.23"
美国的数字)。
- 3 回答
- 0 关注
- 500 浏览
添加回答
举报