根据iPhone中的正则表达式在文本字段上执行电话号码验证

时间:2012-04-07 08:42:38

标签: iphone objective-c

我的应用程序中有一个文本字段,我正在对phonenumber(+ 00-0000000000)进行验证,用户必须首先输入'+'然后输入国家代码,该代码将超过2位且在国家代码后面 - ''在输入“ - ”后,将输入任何无数字的手机号码。

我使用正则表达式完成了代码,但是当我最初在文本字段中输入任何字母代替'+'我的应用程序崩溃时,当我输入+ 00-即+ countrycode-然后任何字母表说'abc'它接受哪个是错的。我希望只有数字和+和 - 必须在文本字段中输入。如果输入除数字和+和 - 以外的任何内容,例如,如果在文本字段中输入字母,则应显示警告视图“请输入有效的移动电话号码”。

这是我的代码:

- (BOOL)validateInputWithString:(NSString *)aString
{
    NSString * const regularExpression = @"^([+]{1})([0-9]{2,6})([-]{1})([0-9]{10})$";
    NSError *error = NULL;
}



-(IBAction)Check:(id)sender{
    BOOL check = [self validateInputWithString:TextField.text];

    if(check == YES){
        NSLog(@"Hii");
        NSString *string= [NSString stringWithFormat:@"%@", TextField.text];
        NSArray *first = [string componentsSeparatedByString:@"-"];
        NSString *second = [first objectAtIndex:1];
        NSString *third = [first objectAtIndex:0];
        if([second length] < 11){
            NSLog(@"bang");
        }
        else{
            NSLog(@"Fault");
        }
        if([third length] > 3 || [third length] < 7){ 
            NSLog(@"Bang");
        }
        else{
            NSLog(@"fault");
        }
    }
    else{
        NSLog(@"FAULT");
    }
}

但是在我的代码中,当我在+ countrycode之后输入字母 - 然后它接受哪个是错误的,当我最初在我的文本文件中输入字母时,我的应用程序在我的按钮点击时崩溃。

1 个答案:

答案 0 :(得分:1)

您的应用因此崩溃:

NSString *string= [NSString stringWithFormat:@"%@", TextField.text];
NSArray *first = [string componentsSeparatedByString:@"-"];
NSString *second = [first objectAtIndex:1];
NSString *third = [first objectAtIndex:0];

首先,你的变量名称不好。为什么第一个是数组,第二个是第二个字符串,第三个是第一个字符串?没有任何意义,没有人会理解这段代码。

但是你的崩溃是因为你分离了字符串然后没有检查它是否存在你访问objectAtIndex 1.如果字符串不包含-,那当然不存在。

这样的事情可以解决你的问题:

NSString *string= [NSString stringWithFormat:@"%@", TextField.text];
NSArray *components = [string componentsSeparatedByString:@"-"];
NSString *strBeforeDash = [components objectAtIndex:0];
if ([components count] > 2) {
    NSLog(@"More than one \"-\" found");
    return;
}
if ([components count == 1) {
    NSLog(@"No \"-\" found");
    return;
}
NSString *strAfterDash = [components objectAtIndex:1];

- (BOOL)validateInputWithString:(NSString *)aString不验证任何内容,因为它既没有验证码也没有返回值。