PMValidation 是一个模块化、可扩展的文本验证库,适用于 iOS 和 tvOS。它带有几个常见的验证类型,用于验证注册表单等常用任务,但它被设计得易于扩展,可以添加您自己的验证类型。有关此库的初步(但功能性)Swift 版本,请参阅 PapersPlease。
从最简单的情况来看,PMValidation 以 PMValidationType 子类的实例开始。这些类提供验证逻辑,如果只需要对字符串进行单个验证测试,可以直接使用。PMValidationType 可以派生来自定义验证逻辑。如果您需要一个更复杂的验证测试,需要几个 PMValidationType 子类,并且需要确定字符串的整体验证状态,请使用 PMValidationUnit 类。当需要验证多个字符串并确定全局验证状态(例如验证表单)时,PMValidationManager 类很有用。此类控制一个或多个 PMValidationUnit 对象,提供整体验证状态和通知路由。此类还简化了 UIKit 文本输入类的验证。
包含的 验证表单示例 项目应该为您提供一个关于 PMValidation 工作方式的良好概述。
以下是一个基本示例,创建一个字符串长度约束,字符串在 4 到 8 个字符之间时通过验证。
PMValidationLengthType *length_type = [PMValidationLengthType validator];
length_type.minimumCharacters = 4;
length_type.maximumCharacters = 8;
PMValidationUnit *unit = [PMValidationUnit validationUnit];
[unit registerValidationType:length_type];
// get validation status update
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(validationStatusNotificationHandler:) name:PMValidationUnitUpdateNotification object:unit];
// listen for validation status updates
- (void)validationStatusNotificationHandler:(NSNotification *)notification {
PMValidationUnit *unit = (PMValidationUnit *)notification.object;
if (!unit.isValid) {
NSDictionary *errors = [notification.userInfo valueForKey:@"errors"];
}
}
// validate the string
[unit validateText:@"Velvet Underground"];
该示例仅使用了一种验证类型类,但您可以根据需要添加任意多个以创建非常复杂的验证测试。将验证类型连在一起的另一种方法是使用PMValidationRegexType类,该类允许使用正则表达式作为验证测试。对于复杂的情况,这可能是更好的选择——PMValidationEmailType在内部使用正则表达式——但使用更基本的验证类型类一起使用可以提供更好的可读性和外部定制。根据您的情况,结果可能有所不同。
验证静态字符串是酷的,但让我们将PMValidationUnit连接到一个UITextField上,以便在文本更改时动态验证它。虽然我们可以仅使用PMValidationUnit来完成此操作,但使用PMValidationManager会更简单。
PMValidationManager *manager = [PMValidationManager validationManager];
PMValidationEmailType *email_type = [PMValidationEmailType validator];
PMValidationUnit *email_unit = [manager registerTextField:self.emailTextField
forValidationTypes:[NSSet setWithObjects:email_type, nil]
identifier:@"email"];
// get validation status update
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(validationStatusNotificationHandler:) name:PMValidationStatusNotification object:self.validationManager];
- (void)validationStatusNotificationHandler:(NSNotification *)notification {
BOOL is_valid = [(NSNumber *)[notification.userInfo objectForKey:@"status"] boolValue];
if (!is_valid) {
NSDictionary *units = [notification.userInfo objectForKey:@"units"];
NSDictionary *email_dict = [units objectForKey:email_type.identifier];
NSDictionary *email_errors = [email_dict objectForKey:@"errors"];
}
}
管理 | |
---|---|
PMValidationUnit | PMValidationUnit负责一次性处理对象的验证,例如静态字符串或UIKit文本对象。它会从零个或多个PMValidationType对象接收更新。 |
PMValidationManager | PMValidationManager负责管理PMValidationUnit实例的运算,并作为接收验证更新的接口。 |
验证类型 | |
PMValidationType | PMValidationType是基验证类。该基类没有内置的验证测试,并将始终对发送到isTextValid方法的任何字符串返回YES。所有其他验证类都从此基类继承。 |
PMValidationEmailType | 此验证类验证目标字符串是否为电子邮件地址,并确定其是否格式正确。 |
PMValidationLengthType | 此验证类基于最小或最大长度约束验证目标字符串。可以使用任一约束单独使用,也可以同时使用。 |
PMValidationRegexType | 此验证类使用正则表达式验证目标字符串。 |
PMValidationStringCompareType | 此验证类通过将目标字符串与另一个字符串进行比较来验证目标字符串。 |
PMValidationUITextCompareType | 此验证类通过将目标字符串与UIKit文本对象进行比较来验证目标字符串。 |
PMValidation由Brett Walker创建,他是Poet & Mountain的人。
PMValidation根据MIT许可证进行许可。