Check if NSString contains alphanumeric + underscore characters only

后端 未结 7 1745
余生分开走
余生分开走 2021-01-30 00:52

I\'ve got a string that needs to be only a-z, 0-9 and _

How do I check if the input is valid? I\'ve tried this but it accepts letter like å,ä,ö,ø etc.

NS         


        
相关标签:
7条回答
  • 2021-01-30 01:18

    this is a quick helper if it helps

    -(BOOL)isString:(NSString *)s{
        char letter = 'A';
        //BOOL isLetter=NO;
        for (int i=0; i<26; i++) {
            NSString *temp = [NSString stringWithFormat:@"%c",letter+i];
            if ([s isEqualToString:temp]) {
                return YES;
            }
        }
        return NO;
    }
    
    0 讨论(0)
  • 2021-01-30 01:19

    You can use a predicate:

    NSString *myRegex = @"[A-Z0-9a-z_]*"; 
    NSPredicate *myTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", myRegex]; 
    NSString *string = nameField.text;
    BOOL valid = [myTest evaluateWithObject:string];
    

    Edit: I don't noticed that you are using [NSString stringWithString:nameField.text].

    Use nameField.text instead.

    0 讨论(0)
  • 2021-01-30 01:21

    You could loop through the every character in the string and check that it's alphanumeric:

    BOOL isMatch = YES;
    for (int i = 0; i < [string length]; i++) {
        unichar c = [string characterAtIndex:i];
        if (!isalnum(c) && c != '_') {
            isMatch = NO;
            break;
        }
    }
    if (isMatch) {
        // valid
    } else {
        // invalid
    }
    
    0 讨论(0)
  • 2021-01-30 01:22

    Some more easy way,

    NSMutableCharacterSet *allowedSet = [NSMutableCharacterSet characterSetWithCharactersInString:@"_"];
    [allowedSet formUnionWithCharacterSet:[NSCharacterSet alphanumericCharacterSet]];
    NSCharacterSet *forbiddenSet = [allowedSet invertedSet];
    

    It'll combine alphanumeric along with _underscore.

    you can use it like,

    NSRange r = [string rangeOfCharacterFromSet:forbiddenSet];
    if (r.location != NSNotFound) {
      NSLog(@"the string contains illegal characters");
    }
    

    PS. example copied from @DaveDeLong example :)

    0 讨论(0)
  • 2021-01-30 01:23

    Here's how you can do it in Swift (as an extension of the String class):

    extension String {
    
         func containsValidCharacters() -> Bool {
    
            var charSet = NSCharacterSet(charactersInString: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_")
            charSet = charSet.invertedSet
    
            let range = (self as NSString).rangeOfCharacterFromSet(charSet)
    
            if range.location != NSNotFound {
                return false
            }
    
            return true
        }
    }
    
    0 讨论(0)
  • 2021-01-30 01:27

    Create your own character set using [NSCharacterSet characterSetWithCharactersInString:], then trim as you were doing to see if the returned string has a length value.

    Or you could use invertedSet to remove all non-set characters, if that would help to produce a cleaned string.

    0 讨论(0)
提交回复
热议问题