gpt4 book ai didi

iphone - 使用正则表达式验证文本字段

转载 作者:行者123 更新时间:2023-12-03 18:27:48 24 4
gpt4 key购买 nike

我需要有关查看文本字段的代码的帮助,确保它以(+ 或 -)开头,然后后面有 3 个整数。

因此有效数据看起来像 +234 或 -888

所以我已经开始这段代码,但有两个问题

  1. 它正确验证只输入了 4 个字符。但由于某种原因,您必须将焦点从文本字段上移开,以便键盘上的“完成”按钮触发并隐藏键盘。如果我在文本字段中只输入少于 4 个字符,那么“完成”按钮就可以正常工作。但我不希望用户输入除 4 个字符之外的任何内容,然后按“完成”并隐藏键盘。这是第一个问题......

  2. 我不熟悉正则表达式以及如何在 iPhone 中使用它们。所以我需要在这段代码中添加正则表达式来满足上述要求。

    -(BOOL)textField:(UITextField*)textFieldshouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
    {
    NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
    return !([newString length] > 4);
    }
    //Done button to hide the keyboard
    -(IBAction)Done:(id)sender
    {

    }

最佳答案

我不确定您希望如何处理用户输入和反馈。首先,我将展示一种简单的方法,让用户在输入无效时保持文本字段的编辑模式。

首先是两个委托(delegate)方法:

- (BOOL)textFieldShouldReturn:(UITextField *)aTextField
{
[aTextField resignFirstResponder];
return YES;
}

- (BOOL)textFieldShouldEndEditing:(UITextField *)aTextField
{
return [self validateInputWithString:aTextField.text];
}

测试方法,无论输入是否有效,只返回 YES 或 NO:

- (BOOL)validateInputWithString:(NSString *)aString
{
NSString * const regularExpression = @"^([+-]{1})([0-9]{3})$";
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:regularExpression
options:NSRegularExpressionCaseInsensitive
error:&error];
if (error) {
NSLog(@"error %@", error);
}

NSUInteger numberOfMatches = [regex numberOfMatchesInString:aString
options:0
range:NSMakeRange(0, [aString length])];
return numberOfMatches > 0;
}

就是这样。不过,我建议向用户显示一些实时状态,无论他的输入是否正确。添加以下通知,例如在 viewDidLoad 方法中:

- (void)viewDidLoad
{
// ...
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(validateInputCallback:)
name:@"UITextFieldTextDidChangeNotification"
object:nil];
}

- (void)validateInputCallback:(id)sender
{
if ([self validateInputWithString:textField.text]) {
// For example turn a label green and let it say: "OK"
} else {
// For example turn a label red and let it say: "Allowed: + or minus followed by exactly three digits"
}
}

最后:如果您需要访问正则表达式的捕获组(+或-以及数字),以下代码将有所帮助:

// ... reg ex creation ...
NSArray *matches = [regex matchesInString:aString
options:0
range:NSMakeRange(0, [aString length])];

for (NSTextCheckingResult *match in matches) {
for (int i = 0; i < [match numberOfRanges]; i++) {
NSLog(@"range %d: %d %d", i, [match rangeAtIndex:i].location, [match rangeAtIndex:i].length);
NSLog(@"substring %d: %@", i, [aString substringWithRange:[match rangeAtIndex:i]]);
}
}

关于iphone - 使用正则表达式验证文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5765654/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com