简单易用的 UITextField 子类,允许您使用设置的格式验证 TextField 文本值。
regexpPattern - 将用于验证字段值的学生模式。
regexp - 您可以传递以使用而不是默认正则表达式的 NSRegularExpression 对象。
regexpValidColor - 有效的文本值颜色。
regexpInvalidColor - 无效文本值颜色。
颜色不是必需的,您可以通过设置块进行设置,在字段验证后进行其他操作。
validatedFieldBlock - 返回 ValidationResult 枚举值的块。默认不设置。您可以设置它,但不是必需的。应在验证期间执行比更改 textField 颜色更复杂的事情(使用 regexpValidColor 和 regexpInvalidColor)。
validWhenType - 默认设置为 YES。如果您设置为 NO,则值将在编辑完成时进行验证。例如,在切换到下一个字段后。
looksForManyOccurences - 如果设置为 YES,字段将进行验证且验证器将在值中查找一个或多个匹配项。应与以下描述的 occurrencesSeparators 属性结合使用。
occurencesSeparators - 此值只应在使用 looksForManyOccurences 时设置。此数组存储用户可以在字段中使用的分隔符。例如,用户输入了数字 "20, 30,40, 50"。如果 occurencesSeparators 设置为 @[",", ", "],该值将成功通过验证。该属性可以简化模式。
numberOfCharactersToStartValidation - 当字段值等于或长于设置的数字时进行验证。如果文本比此值短,字段看起来正常(没有有效和无效颜色 - 初始状态),但如果已定义块,它将使用 ValueTooShortToValidate 调用该块。默认设置为 1(最小值)。
isValid - (只读,BOOL) 如果字段中的值有效,则返回 YES,否则返回 NO。
有几种方法可以使用此类。
1) 带颜色的文本字段
_fullNameTextField.regexpPattern = @"[a-zA-Z]{2,}+(\\s{1}[a-zA-Z]{2,}+)+"; /// e.g. Tomasz Szulc or Cing Yo Ciong
_fullNameTextField.regexpValidColor = [UIColor validColor];
_fullNameTextField.regexpInvalidColor = [UIColor invalidColor];
已设置正则表达式模式和有效的正则表达式颜色。 textField 在用户输入时进行验证。
2) 带验证块的字段
_phoneNumberTextField.regexpPattern = @"\\d{3}-\\d{3}-\\d{3}"; /// e.g 555-343-333
_phoneNumberTextField.minimalNumberOfCharactersToStartValidation = 11;
_phoneNumberTextField.validWhenType = NO;
_phoneNumberTextField.validatedFieldBlock = ^(ValidationResult result, BOOL isEditing) {
switch (result) {
case ValidationPassed:
NSLog(@"Field is valid.");
break;
case ValidationFailed:
NSLog(@"Field is invalid.");
break;
case ValueTooShortToValidate:
NSLog(@"Value too short to validate. Type longer");
break;
}
};
未设置颜色(即使有效或无效,textColor 也会相同)。validWhenType 属性已设置为 NO,因此字段将在用户结束编辑时进行验证。代替更改文本颜色,块将被调用,其中包含 ValidationResult 枚举的一个案例。
3) 几个字符后的验证
_wordStartsWithA.regexpPattern = @"^A[a-zA-Z]{3,}";
_wordStartsWithA.regexpValidColor = [UIColor validColor];
_wordStartsWithA.regexpInvalidColor = [UIColor invalidColor];
/// Visualization of validation will be visible when value is 4 characters long.
_wordStartsWithA.minimalNumberOfCharactersToStartValidation = 4;
如果文本字段长度等于或长于最小字符数来开始验证,则会对文本字段进行验证。如果已经配置了此块,它将使用 TooShortToValidate 参数被调用。
4) TextField 对多次出现进行检查
_separatedNumbersByComma.regexpPattern = @"[-]?[0-9]+";
_separatedNumbersByComma.regexpValidColor = [UIColor validColor];
_separatedNumbersByComma.regexpInvalidColor = [UIColor invalidColor];
_separatedNumbersByComma.looksForManyOccurences = YES;
_separatedNumbersByComma.occurencesSeparators = @[@",", @", "];
在这里已设置 looksForManyOccurences 和 occurrencesSeparators。如果字段需要数字,可以在用户输入 "20, 20, 40, 60" 或 "20,20,40,60" 或 "20, 20,40, 60" 时验证成功。强烈建议一起使用 looksForManyOccurences 和 occurrencesSeparators。
5) 带有自定义 NSRegularExpression 的 TextField
_wordStartsWithB.regexpValidColor = [UIColor validColor];
_wordStartsWithB.regexpInvalidColor = [UIColor invalidColor];
NSString *pattern = @"^B[a-zA-Z]{3,}";
NSRegularExpression *regexp = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:nil];
[_wordStartsWithB setRegexp:regexp];
如果默认的 NSRegularExpression 不够用,您可以设置自定义的。