我有一个字符串,只需要az,0-9和_
如何检查输入是否有效?我试过这个,但它接受像å,ä,ö,ø等字母.
NSString *string = [NSString stringWithString:nameField.text];
NSCharacterSet *alphaSet = [NSCharacterSet alphanumericCharacterSet];
[string stringByTrimmingCharactersInSet:alphaSet];
[string stringByReplacingOccurrencesOfString:@"_" withString:@""];
BOOL valid = [[string stringByTrimmingCharactersInSet:alphaSet] isEqualToString:@""];
Run Code Online (Sandbox Code Playgroud)
Dav*_*ong 129
您可以创建自己的字符集:
NSCharacterSet *s = [NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_"];
Run Code Online (Sandbox Code Playgroud)
完成后,将其反转为原始字符串中不包含的所有内容:
s = [s invertedSet];
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用字符串方法来查找您的字符串是否包含反转集中的任何内容:
NSRange r = [string rangeOfCharacterFromSet:s];
if (r.location != NSNotFound) {
NSLog(@"the string contains illegal characters");
}
Run Code Online (Sandbox Code Playgroud)
Sin*_*ris 36
您可以使用谓词:
NSString *myRegex = @"[A-Z0-9a-z_]*";
NSPredicate *myTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", myRegex];
NSString *string = nameField.text;
BOOL valid = [myTest evaluateWithObject:string];
Run Code Online (Sandbox Code Playgroud)
编辑:
我没注意到你在使用[NSString stringWithString:nameField.text]
.
请nameField.text
改用.
一些更简单的方法,
NSMutableCharacterSet *allowedSet = [NSMutableCharacterSet characterSetWithCharactersInString:@"_"];
[allowedSet formUnionWithCharacterSet:[NSCharacterSet alphanumericCharacterSet]];
NSCharacterSet *forbiddenSet = [allowedSet invertedSet];
Run Code Online (Sandbox Code Playgroud)
它会将字母数字与_underscore结合起来.
你可以像使用它一样
NSRange r = [string rangeOfCharacterFromSet:forbiddenSet];
if (r.location != NSNotFound) {
NSLog(@"the string contains illegal characters");
}
Run Code Online (Sandbox Code Playgroud)
PS.从@DaveDeLong示例复制的示例:)
归档时间: |
|
查看次数: |
36440 次 |
最近记录: |