ALPValidator 0.0.6

ALPValidator 0.0.6

测试已测试
Lang语言 Obj-CObjective C
许可 MIT
Released最新发布2015年2月

Adam Waite 维护。



ALPValidator 为您的 iOS 应用提供用户输入验证功能。它具备以下特性:多个内建验证规则、一些方便的方法来验证用户输入、一个验证状态改变处理块、公开的错误消息集合、以及一个对 UIView 提供验证输入功能的类别。它不主观臆断,是您的应用程序,您可以根据自己的意愿来处理 UI 上的验证错误。

内建验证

  • 存在性验证
  • 最小长度验证
  • 最大长度验证
  • 范围验证(字符串字符长度和数字)
  • 相等性验证(用于密码确认等)
  • 正则表达式匹配验证
  • 电子邮件地址验证
  • 自定义块验证
  • 远程验证(远程网络服务验证)
  • 确保字符串包含至少一个数字
  • 随需求持续更新!

demo-vid

注意:演示中展示的 UI 与库无关,它是功能展示的一部分。

安装

使用 CocoaPods 安装

pod 'ALPValidator'

使用方法

创建一个 ALPValidator

  1. 导入

    #import "ALPValidator.h"

  2. 使用以下方法创建一个字符串验证实例

    ALPValidator *validator = [ALPValidator validatorWithType:ALPValidatorTypeString];

    或者创建一个数字验证实例

    ALPValidator *validator = [ALPValidator validatorWithType:ALPValidatorTypeNumeric];

    或者创建一个通用的验证实例

    `ALPValidator *validator = [ALPValidator validator];

添加验证规则

使用 addRule 方法添加验证规则。当添加规则时,您可以提供一个错误消息字符串作为参数,如果在验证失败时,它将出现在 errorMessages 数组中。一些 addRule 方法可能需要额外的参数,它们应该是自解释的。您可以向验证器添加任意多的验证规则。

  • 存在性验证
- (void)addValidationToEnsurePresenceWithInvalidMessage:(NSString *)message;
  • 最小长度验证
- (void)addValidationToEnsureMinimumLength:(NSUInteger)minLength invalidMessage:(NSString message;
  • 最大长度验证
- (void)addValidationToEnsureMaximumLength:(NSUInteger)maxLength invalidMessage:(NSString *)message;
  • 范围验证
- (void)addValidationToEnsureRangeWithMinimum:(NSNumber *)min maximum:(NSNumber *)max invalidMessage:(NSString *)message;
  • 相等性验证
- (void)addValidationToEnsureInstanceIsTheSameAs:(id)otherInstance invalidMessage:(NSString *)message;
  • 正则表达式验证
- (void)addValidationToEnsureRegularExpressionIsMetWithPattern:(NSString *)pattern invalidMessage:(NSString *)message;
  • 有效电子邮件地址验证
- (void)addValidationToEnsureValidEmailWithInvalidMessage:(NSString *)message;
  • 自定义块验证(从块中返回 YESNO
- (void)addValidationToEnsureCustomConditionIsSatisfiedWithBlock:(ALPValidatorCustomRuleBlock)block invalidMessage:(NSString *)message;
  • 远程验证
- (void)addValidationToEnsureRemoteConditionIsSatisfiedAtURL:(NSURL *)url invalidMessage:(NSString *)message;
  • 字符串包含数字验证
- (void)addValidationToEnsureStringContainsNumberWithInvalidMessage:(NSString *)message;

验证

使用 validate: 方法来验证一个实例

ALPValidator *validator = [ALPValidator validatorWithType:ALPValidatorTypeString];
[validator addValidationToEnsureValidEmailWithInvalidMessage:NSLocalizedString(@"That's not an email!", nil)];
[validator validate:@"hey"];

这将更改变量验证器的 state 属性为 ALPValidatorValidationStateInvalid,并且 isValid 方法将返回 NO

当用户在一个控件中输入时,你可以这样进行验证

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.someTextField addTarget:self action:@selector(textFieldTextChanged:) forControlEvents:UIControlEventEditingChanged];
}

- (void)textFieldTextChanged:(UITextField *)sender
{
    [self.someValidator validate:sender.text];
}

或者,可以使用 UIView+ALPValidator 分类中定义的 alp_attachValidator: 方法来自动配置验证功能。

[self.someTextField alp_attachValidator:someStringValidator];

验证状态更改处理器

使用 validatorStateChangedHandler 在验证状态发生更改时收到通知。

self.someValidator = [ALPValidator validatorWithType:ALPValidatorTypeString];
self.someValidator.validatorStateChangedHandler = ^(ALPValidatorState newState) {
    switch (newState) {

        case ALPValidatorValidationStateValid:
            // do happy things
            break;

        case ALPValidatorValidationStateInvalid:
            // do unhappy things
            break;

        case ALPValidatorValidationStateWaitingForRemote:
            // do loading indicator things
            break;

    }
};

查看本存储库中包含的示例,了解如何使用状态更改处理器在用户输入控件时更新 UI 的验证状态。

验证错误消息

当验证器失败时,添加规则时传递的任何错误消息都将添加到公共 errorMessages 数组中。你可能可以使用此数组来通知用户其输入为何不够标准。

ALPValidator *mixedValidator = [ALPValidator validatorWithType:ALPValidatorTypeString];

[mixedValidator addValidationToEnsureMinimumLength:15 invalidMessage:NSLocalizedString(@"This is too short!", nil)];

[mixedValidator addValidationToEnsureCustomConditionIsSatisfiedWithBlock:^BOOL(NSString *instance) {
    return ([instance rangeOfString:@"A"].location == NSNotFound);
} invalidMessage:NSLocalizedString(@"No capital As are allowed!", nil)];

[mixedValidator addValidationToEnsureValidEmailWithInvalidMessage:NSLocalizedString(@"That's not an email address!", nil)];

[mixedValidator validate:@"invA@lid,com"];

NSLog(@"%@", mixedValidator);

上面的代码将输出类似于以下内容的日志

ALPStringValidator 0x10911ddc0: {
    "_state" = 0;
    errorMessages =     (
        "This is too short!",
        "No capital As are allowed!",
        "That's not an email address!"
    );
    "state as string" = Invalid;
}

UIView+ALPValidator

UIView+ALPValidator 分类扩展了 UIView,以在用户更改输入值时提供即时验证。

使用 alp_attachValidator: 来自动配置验证器,当输入发生变化时调用 validate: (这将触发状态更改块)。

[self.textField alp_attachValidator:self.validator];

使用 alp_removeValidators 来移除自动验证。

请参阅使用 UIView 分类进行验证的示例项目。

支持

  • UITextField
  • UITextView

远程验证

jQuery 验证 插件类似,ALPValidator 支持远程验证。你可以向验证器实例添加一个远程验证规则来确保服务器端条件满足。例如,这可能是条件:不允许两个用户以相同的用户名注册您的服务。

通常,在填充完整的注册表单并点击按钮后,您可能需要向注册服务发起请求。您只有在服务返回包含错误信息在 JSON 响应中之类的错误后,才会通知用户已选择的用户名已被占用。如果用户在输入时异步请求并更新 UI 以更接近实时告诉用户,这种体验将得到改善。

ALPValidator *remoteValidator = [ALPValidator validatorWithType:ALPValidatorTypeString];
[remoteValidator addValidationToEnsureRemoteConditionIsSatisfiedAtURL:[NSURL URLWithString:@"http://app-backend.com/api/usernameavailable"] invalidMessage:NSLocalizedString(@"That username has been taken", nil)];

现在当调用 validate: 时,验证器将把 state 属性更改为 ALPValidatorValidationStateWaitingForRemote,直到服务器响应。然后,根据响应将其更改到 ALPValidatorValidationStateValidALPValidatorValidationStateInvalid

如果响应为 JSON true,则验证规则通过;如果 JSON false 或其他任何内容,则失败。如果服务器通过错误未响应,验证也将失败。

可选地遵守 <ALPValidatorDelegate> 并设置 delegate 属性,以在服务器成功响应或请求失败时接收通知。您应该实现的信息相关的委托方法是定义在 <ALPValidatorDelegate>

@protocol ALPValidatorDelegate <NSObject>

@optional
- (void)validator:(ALPValidator *)validator remoteValidationAtURL:(NSURL *)url receivedResult:(BOOL)remoteConditionValid;
- (void)validator:(ALPValidator *)validator remoteValidationAtURL:(NSURL *)url failedWithError:(NSError *)error;

@end

你可能想在请求中提供额外参数,你可以在通过提供包含任何附加参数的 NSDictionaryvalidate:parameters: 方法中这样做。

远程验证请求以HTTP POST请求的形式发送,内容类型为application/json。HTTP正文包含一个JSON字符串,该字符串包含"instance":属性(您想要验证的内容)和一个"extras":属性(如果传递了一个NSDictionary,则包含任何附加参数)。您应该能够在服务器端代码中获取这些信息,并在评估一些条件后进行响应。

示例

已在这存储库中包含一个Xcode项目,包含每个验证规则和一些其他功能的示例。要测试远程验证,请使用ruby demo_server.rb命令启动Sinatra服务器。

路线图

  • 文件类型验证器(图像等的最大大小)
  • 电话号码验证
  • 信用卡验证
  • 邮政编码验证
  • 输入存在于一个集合的验证(用于选择类型输入)

贡献

欢迎贡献力量。在发起拉取请求之前,请确保在更改现有代码或在新的规范中支撑新功能时,所有Kiwi规范都通过。同时,请更新README,包含任何新功能。谢谢。

联系方式

@adamwaite

感谢

ALPValidator受jQuery ValidationParsleyJS的启发,谢谢。

许可

在此,免费许可任何获得此软件及其相关文档文件(以下简称“软件”)副本的人,任其在不受限制的情况下处理此软件,包括(但不限于)使用、复制、修改、合并、发布、分发、转授许可和/或出售软件复制品,并允许将软件提供给任何接收者以供其按本许可证的规定ことをする。

上述版权声明和本许可声明应包含在软件复制品的所有副本或实质部分中。

软件按“现状”提供,不提供任何形式的保证,无论是明示的还是暗示的,包括但不限于适销性、适于特定目的性和非侵权性。在任何情况下,作者或版权持有人不应对因使用或否则处理软件或使用或否则处理软件而产生的任何索赔、损害或其他责任承担责任,无论该责任是否基于合同、侵权或其他法律行为,也不论该责任是从软件或使用或否则处理软件中产生的,还是与之相关。