48 votes

Comment vérifier si une chaîne ne contient que des caractères alphanumériques dans l'objectif C?

Je travaille sur un petit projet iphone et il me faudrait vérifier si le nom d'utilisateur entré contient uniquement des caractères alphanumériques? (A-Z, a-z, 0-9 . Comment pourrais-je vérifier cela?

86voto

Jason Harwig Points 9925

Si vous ne souhaitez pas importer de bibliothèque regex pour cette tâche particulière ...

 NSString *str = @"aA09";
NSCharacterSet *alphaSet = [NSCharacterSet alphanumericCharacterSet];
BOOL valid = [[str stringByTrimmingCharactersInSet:alphaSet] isEqualToString:@""];
 

62voto

NSResponder Points 14459

Cela fonctionnera:

 @implementation NSString (alphaOnly)

- (BOOL) isAlphaNumeric
   {
    NSCharacterSet *unwantedCharacters = 
       [[NSCharacterSet alphanumericCharacterSet] invertedSet];

    return ([self rangeOfCharacterFromSet:unwantedCharacters].location == NSNotFound) ? YES : NO;
    }

@end
 

9voto

Soviut Points 26384

Vous pouvez utiliser cette bibliothèque d'expressions régulières pour ObjectiveC. Utilisez les expressions régulières suivantes:

 ^[a-zA-Z0-9]*$
 

9voto

JosephH Points 21074

L' NSCharacterSet réponses ne donnent pas les résultats que vous pouvez attendre pour le Japonais etc texte, souvent en prétendant qu'ils ne contenir que des caractères alphanumériques - le test effectué se résume à "sont là que des lettres ou des chiffres", et les Japonais (etc) caractères comptent comme des "Lettres".

Si vous essayez de vérifier les caractères latins vs une langue étrangère (par exemple. Le japonais), puis la réponse de " Comment déterminer si une NSString est latin? "peut aider:

BOOL isLatin = [myString canBeConvertedToEncoding:NSISOLatin1StringEncoding];

NSASCIIStringEncoding pourrait également être utilisé à la place de NSISOLatin1StringEncoding pour restreindre davantage les caractères valides. Vous pouvez également tester à l'aide de NSCharacterSet par la suite, afin d'exclure les caractères spéciaux comme !, #, etc.

2voto

Adrian Points 646

J'aime beaucoup le framework RegexKit Lite . Il utilise la bibliothèque de regex ICU, qui est déjà incluse dans OSX et qui est sécurisée pour Unicode.

 NSString *str = @"testString";
[str isMatchedByRegex:@"^[a-zA-Z0-9]*$"]; // strict ASCII-match
[str isMatchedByRegex:@"^[\p{L}\p{N}]*$"]; // unicode letters and numbers match
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X