1

アプリケーションにテキストフィールドがあり、電話番号 (+00-0000000000) の検証を行っています。ユーザーは最初に「+」を入力し、次に 2 桁以上の国コードを入力し、国コードの後に​​「-」を入力し、「」の後に入力する必要があります。 -' 携帯電話番号が入力されますが、数字はありません。

正規表現を使用してコードを作成しましたが、最初にテキストフィールドに「+」の代わりに任意のアルファベットを入力すると、アプリがクラッシュし、+00- ie +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- の後にアルファベットを入力すると、どちらが間違っているかが受け入れられ、テキストファイルに最初にアルファベットを入力すると、ボタンのクリックでアプリがクラッシュします。

4

1 に答える 1

1

あなたのアプリは次の理由でクラッシュします:

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

まず、変数名が良くありません。1 番目が配列、2 番目が 2 番目の文字列、3 番目が最初の文字列であるのはなぜですか? 意味がありませんし、誰もこのコードを理解することはありません。

しかし、文字列を分離し、それが存在するかどうかを確認せずに 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検証コードも戻り値もないため、何も検証しません。

于 2012-04-07T08:58:24.253 に答える