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

我会做一些使用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 回答
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 回答
2

NSPredicate是你想要的

有关谓词编程的更多信息。基本上你想要“自我匹配”(你的正则表达式)。之后,您可以使用该evaluateWithObject:方法。

编辑更简单的方法:(没关系,当我正在编辑它时,沃特森发布了我要写的内容)

于 2013-01-09T08:54:18.823 回答
1

您可以使用 NSRegularExpression 类来执行此操作。

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

于 2013-01-09T08:55:30.900 回答
1

你也可以使用 NSRegularExpression 来搜索你的 NSString,如果它只包含有效的字符(反之亦然)。

更多信息:

使用正则表达式搜索 NSString

使用正则表达式查找/替换 NSString 中的子字符串

于 2013-01-09T08:56:32.437 回答
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
+(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

您可以使用正则表达式。如果每件事都失败了,请使用蛮力,例如

 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 回答