web-dev-qa-db-fra.com

Vérifiez NSString pour les caractères spéciaux

Je veux vérifier une chaîne NSS pour les caractères spéciaux, c'est-à-dire tout sauf a-z, A-Z et 0-9.

Je n'ai pas besoin de vérifier combien de caractères spéciaux sont présents, ou leurs positions, j'ai juste besoin de savoir si une chaîne particulière en contient ou non. Si c'est le cas, je veux pouvoir afficher "Erreur!", Ou quelque chose de similaire.

Par exemple, jHfd9982 est OK mais asdJh992 @ ne l'est pas.

De même, les lettres avec des accents, des signes diacritiques, etc. ne devraient pas être autorisées.

Comment pourrais-je m'y prendre?

Merci!

Michael

33
Michael
NSCharacterSet * set = [[NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLKMNOPQRSTUVWXYZ0123456789"] invertedSet];

if ([aString rangeOfCharacterFromSet:set].location != NSNotFound) {
  NSLog(@"This string contains illegal characters");
}

Vous pouvez également utiliser une expression régulière (cette syntaxe provient de RegexKitLite: http://regexkit.sourceforge.net ):

if ([aString isMatchedByRegex:@"[^a-zA-Z0-9]"]) {
  NSLog(@"This string contains illegal characters");
}
109
Dave DeLong

Ici, le code que vous pouvez utiliser pour vérifier que la chaîne a un caractère spécial ou non

NSString *string = <your string>;

NSString *specialCharacterString = @"!~`@#$%^&*-+();:={}[],.<>?\\/\"\'";
NSCharacterSet *specialCharacterSet = [NSCharacterSet
                                       characterSetWithCharactersInString:specialCharacterString];

if ([string.lowercaseString rangeOfCharacterFromSet:specialCharacterSet].length) {                
    NSLog(@"contains special characters");
}
8
loganathan

Vous souhaitez rechercher NSString à l'aide d'un jeu de caractères s'il ne trouve aucun caractère dans la chaîne, alors rangeOfCharacterFromSet: renverra une plage de {NSNotFound, 0}

Le jeu de caractères serait comme [NSCharacterSet symbolCharacterSet] ou votre propre jeu. Notez que vous pouvez également inverser les jeux de caractères afin d'avoir un jeu de caractères acceptables

6
Mark

Si vous souhaitez supprimer des caractères spéciaux et des nombres de n'importe quelle chaîne (même du texte), pendant que vous modifiez, ces lignes ci-dessous sont très pratiques:

#define ACCEPTABLE_CHARACTERS @"!~`@#$%^&*-+();:=_{}[],.<>?\\/|\"\'0123456789"

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    NSCharacterSet *cs = [NSCharacterSet characterSetWithCharactersInString:ACCEPTABLE_CHARACTERS];

    NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];

    return (![string isEqualToString:filtered]) ? NO : YES;
}
4
Waleed Mahmood

Ce code autorise uniquement les nombres en entrée UITextField.

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    if ([string rangeOfCharacterFromSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]].location != NSNotFound)
        return NO;
    else
        return YES;

}
2
Gaurav