0

テキストフィールドに特殊文字が入力されているかどうかを確認したいという状況があります。

特殊文字が入力されていない場合は、YES を返す必要があります。特殊文字がテキストフィールドに入力された場合、その特殊文字が設定された文字からのものであるかどうかを確認するためのチェックが行われます。入力された特殊文字が特殊文字のセットからのものでない場合は、NO を返す必要があります。

これは私のコードです:

NSCharacterSet *newrang = [[NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"] invertedSet];
    NSRange newrange = [pwd rangeOfCharacterFromSet:newrang];

    if (!newrange.length)
    {
        return YES;
    }
    else
    {
        NSCharacterSet* set =
        [[NSCharacterSet characterSetWithCharactersInString:@"!@#$%^&*"] invertedSet];
        NSRange checkrange = [pwd rangeOfCharacterFromSet:set];
        if (checkrange.location==NSNotFound)
        {
            NSLog(@"NO");
        }
        else
        {
            NSLog(@"YEs");
        }

            if ([pwd rangeOfCharacterFromSet:set].location == NSNotFound) {
                return NO;
            } else {
                return YES;
            }

    }

私の問題は、abc@_123 と入力すると YES が返されることです。代わりに、無効な特殊文字であるため NO を返す必要があります。

"_"

あります。

ありがとう

4

1 に答える 1

2

NSCharacterSet私が作成したようにブロックしたいキャラクターを作成しますalphanumericCharacterSet invertedSet。ユーザーがテキスト フィールドに新しい文字を入力するか、既存の文字を削除するたびに、テキスト フィールドはこのメソッドを呼び出しますUITextFieldDelegatetextField:shouldChangeCharactersInRange:replacementString:

これを確認してください。

NSCharacterSet *blockCharacters = [[NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@#"] invertedSet];    
- (BOOL)textField:(UITextField *)field shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)characters
    {
        return ([characters rangeOfCharacterFromSet:blockCharacters].location == NSNotFound);
    }
于 2014-05-18T12:52:33.237 に答える