3

この単純な検証方法NSStringは問題を引き起こします。値がNSStringあり、文字列を検証したい、つまり、文字列に'a to z' (または) 'A to Z' (または) '1 to 9' (または) '@,!,&' のみが含まれている場合その場合、文字列は有効です。文字列に他の値が含まれている場合、これNSStringは無効です。これを検証するにはどうすればよいですか?

例として:

有効:

NSString *str="aHrt@2"; // something like this 

無効:

NSString *str="..gS$"; // Like this
4

9 に答える 9

3

文字セットを使用してみてください:

NSMutableCharacterSet *set = [NSMutableCharacterSet characterSetWithCharactersInString:@"@!&"];
[set formUnionWithCharacterSet:[NSCharacterSet alphanumericCharacterSet]];
if ([string rangeOfCharacterFromSet:[set invertedSet]].location == NSNotFound) {
    // contains a-z, A-Z, 0-9 and &@! only - valid
} else {
    // invalid
}
于 2013-01-09T08:58:40.407 に答える
3

私は何かをするだろうstringByTrimmingCharactersInSet

すべての有効な文字を含む を作成し、NSCharacterSetそれらの文字をテスト文字列から削除します。文字列が空の場合は有効です。文字が残っている場合は無効です。

NSCharacterSet *validCharacters = [NSCharacterSet characterSetWithCharactersInString:@"myvalidchars"];
NSString *trimmedString = [testString stringByTrimmingCharactersInSet:validCharachters];
BOOL valid = [trimmedString length] == 0;

編集: テキストフィールドに入力できる文字を制御したい場合はtextField:shouldChangeCharactersInRange:replacementString:UITextFieldDelegate

ここで testString 変数が提案された文字列になり、無効な文字がない場合は YES を返します

于 2013-01-09T08:55:43.343 に答える
2

NSPredicateクラスはあなたが望むものです

述語プログラミングに関する詳細情報。基本的に、「自己一致」(正規表現) が必要です。その後、evaluateWithObject:メソッドを使用できます。

EDITより簡単な方法:(気にしないでください。編集しているので、ワトソンが私がしようとしていたことを投稿しました)

于 2013-01-09T08:54:18.823 に答える
1
- (BOOL)validation:(NSString *)string  
{

   NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:@"1234567890abcdefghik"] invertedSet];
NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
return ([string isEqualToString:filtered]);
}

ボタンアクション:

-(IBAction)ButtonPress{

 if ([self validation:activity.text]) {
    NSLog(@"Macth here");
}
else {
    NSLog(@"Not Match here");
}
}

この「1234567890abcdefghik」を、一致させたい文字に置き換えます

于 2013-01-09T08:58:53.617 に答える
1

NSRegularExpression を使用して、有効な文字のみが含まれている場合 (またはその逆)、NSString を検索することもできます。

より詳しい情報:

正規表現を使用して NSString を検索する

正規表現を使用して NSString の部分文字列を検索/置換する

于 2013-01-09T08:56:32.437 に答える
1
+(BOOL) validateString: (NSString *) string
{
    NSString *regex = @"[A-Z0-9a-z@!&]";
    NSPredicate *test = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",  emailRegex];
    BOOL isValid = [test evaluateWithObject:string];
    return isValid;
}
于 2013-01-09T08:59:36.313 に答える
1

を使用して簡単に実行できますNSMutableCharacterSet

NSMutableCharacterSet *charactersToKeep = [NSMutableCharacterSet alphanumericCharacterSet];
[charactersToKeep addCharactersInString:@"@?!"];
NSCharacterSet *charactersToRemove = [charactersToKeep invertedSet]
NSString *trimmed = [ str componentsSeparatedByCharactersInSet:charactersToRemove];
if([trimmed length] != 0)
{
  //invalid string
}

リファレンスNSCharacterSet

于 2013-01-09T09:01:48.143 に答える
1

クラス NSRegularExpression を使用してこれを行うことができます。

https://developer.apple.com/library/mac/documentation/Foundation/Reference/NSRegularExpression_Class/Reference/Reference.html

于 2013-01-09T08:55:30.900 に答える
1

正規表現を使用できます。すべてが失敗した場合は、次のようなブルー​​トフォースを使用します

 unichar c[yourString.length];
         NSRange raneg={0,2};
        [yourString getCharacters:c range:raneg];

// now in for loop

    for(int i=0;i<yourString.length;i++)
    {
     if((c[i]>='A'&&c[i]<='Z')&&(c[i]=='@'||c[i]=='!'||c[i]=='&'))
       {
         //not the best or most efficient way but will work till you write your regex:P
       }


    }
于 2013-01-09T09:09:08.820 に答える