iOS中的NSString值验证

时间:2013-01-09 08:52:08

标签: iphone ios objective-c nsstring

这种NSString的简单验证方法会造成麻烦。 我有一个NSString值,我想验证字符串,即,如果字符串包含仅'a到z'(或)'A到Z'(或)'1到9'(或)'@,!,&'然后字符串有效。如果字符串包含任何其他值,那么NSString无效,我该如何验证呢?

例如:

有效:

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

无效:

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

9 个答案:

答案 0 :(得分:3)

我会使用stringByTrimmingCharactersInSet

做点什么

创建一个包含所有有效字符的NSCharacterSet,然后从测试字符串中修剪这些字符,如果字符串现在为空它有效,如果有任何字符遗留,则无效

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

修改 如果您想控制可以输入文字字段的字符,请使用textField:shouldChangeCharactersInRange:replacementString:中的UITextFieldDelegate

这里testString变量成为建议的字符串,如果没有无效字符,则返回YES

答案 1 :(得分: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
}

答案 2 :(得分:2)

NSPredicate类就是你想要的

关于谓词编程的

More info。基本上你想要“自我匹配”(你的正则表达式)。之后,您可以使用evaluateWithObject:方法。

编辑更简单的方法:(没关系,因为我正在编辑它瓦特森发布了我要去的地方)

答案 3 :(得分:1)

答案 4 :(得分:1)

如果NSString仅包含有效字符(或反之亦然),您也可以使用NSRegularExpression搜索NSString。

更多信息:

Search through NSString using Regular Expression

Use regular expression to find/replace substring in NSString

答案 5 :(得分: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”替换为您要与之匹配的字母

答案 6 :(得分: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;
}

答案 7 :(得分:1)

您只需使用NSMutableCharacterSet

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

参考NSCharacterSet

答案 8 :(得分: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
       }


    }