这种NSString
的简单验证方法会造成麻烦。
我有一个NSString
值,我想验证字符串,即,如果字符串包含仅'a到z'(或)'A到Z'(或)'1到9'(或)'@,!,&'然后字符串有效。如果字符串包含任何其他值,那么NSString
无效,我该如何验证呢?
例如:
有效:
NSString *str="aHrt@2"; // something like this
无效:
NSString *str="..gS$"; // Like this
答案 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)
您可以使用NSRegularExpression类来执行此操作。
答案 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
}
答案 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
}
}