一个易于验证值的库。
最简单的方式是使用 QBValidator
的 validateValues:rules:errorMessages:
。
values
是键值对的组合,rules
是键和规则数组的组合。
以下示例将失败。
让我们更改值以通过所有测试 :)
QBValidator *validator = [QBValidator validator];
NSDictionary *errorMessages = nil;
BOOL isValid = [validator validateValues:@{
@"key1": @"suzuya",
@"key2": @"agano",
@"key3": @(58),
@"key4": @(168),
@"key5": @"abc+123",
@"key6": @"[email protected]"
}
rules:@{
@"key1": @[QBVRequired, QBVEqualTo(@"kumano")],
@"key2": @[QBVContainedIn(@[@"mogami", @"mikuma", @"suzuya", @"kumano"])],
@"key3": @[QBVNot(QBVEqualTo(@(58)))],
@"key4": @[QBVInRange(1, 100)],
@"key5": @[QBVMatch(@"^[a-zA-Z0-9]+$")],
@"key6": @[QBVEmail]
}
errorMessages:&errorMessages];
if (isValid) {
NSLog(@"OK!");
} else {
NSLog(@"errorMessages: %@", errorMessages);
}
另一种方式是结合使用 UITextField
,下面将进行解释。
此库包含名为 UITextField+QBValidator
的类别,具有以下方法:
- (void)setValidationRules:(NSArray *)rules
- (NSArray *)validationRules
- (BOOL)validate:(NSArray * __autoreleasing *)errorMessages
因此,如果您想验证表单中的单独字段,请使用 setValidationRules:
添加规则,并使用 QBValidator
的 validateValue:name:rules:errorMessages:
进行验证。
您可以通过继承 QBValidationRule
来创建自己的自定义规则。
需要覆盖的方法是
必需的
- (BOOL)validateValue:(id)value
可选
- (NSString *)localizationTableName
- (NSString *)localizationKey
为了本地化由 QBValidator
生成的错误消息,您应该为不同的语言创建 QBValidator.strings
或创建 QBValidationRule
的子类并重写 localizationTableName
和 localizationKey
方法。
QBVRequired
QBVEmail
QBVURI
QBVEqualTo(id value)
QBVGreaterThan(id value)
QBVGreaterThanOrEqualTo(id value)
QBVLessThan(id value)
QBVLessThanOrEqualTo(id value)
QBVInRange(NSUInteger min, NSUInteger max)
QBVInRange(NSUInteger min, NSUInteger max, BOOL inclusive)
QBVContainedIn(NSArray *preferredValues)
QBVNot(QBValidationRule *rule)
QBVIf(QBValidationRule *rule, NSDictionary *conditionalRules)
QBVMatch(NSString *pattern)
QBVBlock(BOOL (^block)(id value))
QBVKindOfClass(Class class)
QBVMemberOfClass(Class class)
QBVSubclassOfClass(Class class)
QBValidator 可以通过 CocoaPods 进行安装。
pod 'QBValidator'
如果您想手动安装,请下载此仓库并将 QBValidator 目录中的文件复制到您的项目中。
请注意,规则必须为数组。
例如
NSDictionary *rules = @{
@"key": @[QBVEqualTo(@"value")]
};
但是当只有一条规则时,您可以省略数组字面量。
例如
NSDictionary *rules = @{
@"key": QBVEqualTo(@"value") // This works.
};
如果您想验证像 NSDictionary
这样的复杂数据,您可以嵌套规则。
例如: (省略数组字面量)
[validator validateValues:@{
@"key1": @"value1",
@"key2": @{
@"subkey1": @"subvalue1"
}
rules:@{
@"key1": QBVEqualTo(@"value1"),
@"key2": @{
@"subkey1": QBVEqualTo(@"subvalue1")
}
errorMessages:NULL];
QBValidator 遵循 MIT 许可协议 发布,请参阅 LICENSE.txt。