QBValidator 1.0.0

QBValidator 1.0.0

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布最后发布2014年12月

Katsuma Tanaka 维护。



  • 作者:
  • questbeat

一个易于验证值的库。

示例

最简单的方式是使用 QBValidatorvalidateValues: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: 添加规则,并使用 QBValidatorvalidateValue:name:rules:errorMessages: 进行验证。

创建自定义规则

您可以通过继承 QBValidationRule 来创建自己的自定义规则。
需要覆盖的方法是

  • 必需的

    • - (BOOL)validateValue:(id)value
  • 可选

    • - (NSString *)localizationTableName
    • - (NSString *)localizationKey

本地化

为了本地化由 QBValidator 生成的错误消息,您应该为不同的语言创建 QBValidator.strings 或创建 QBValidationRule 的子类并重写 localizationTableNamelocalizationKey 方法。

宏和函数

  • 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