2010-01-06 5 views
1

Je travaille sur une application iPhone et le besoin de vous assurer que le texte saisi est composé de seulement à z et des chiffres.Vérifiez si le texte saisi utilise uniquement les lettres anglaises

Je ne veux pas que l'utilisateur utilise des lettres d'autres langues comme celles avec des accents ou des points au-dessus d'eux.

EDIT: Je suis nouveau à ce RegEx, donc si vous s'il vous plaît donnez-moi un code ou un lien, je serai vraiment reconnaissant.

+0

Êtes-vous la ponctuation permettant ainsi? – ChrisF

+0

nop, ne permettant pas la ponctuation – Adhamox

Répondre

9

Utilisez une expression régulière, telle que [0-9a-zA-Z]+. Découvrez le RegexKit Framework pour Objective C, une bibliothèque d'expressions régulières qui fonctionne sur l'iPhone.

Vous pouvez faire quelque chose comme:

NSString *str = @"abc0129yourcontent"; 
BOOL isMatch = [str isMatchedByRegex:@"^[0-9a-zA-Z]+$"]; 
2

La méthode la plus simple - en supposant que vous souhaitiez également autoriser la ponctuation, est de vérifier que tous les caractères se trouvent entre les valeurs ASCII 32 (espace) et 126 (~). Le ASCII table illustre le point.

Tous les caractères accentués sont ce que nous appelions "high" ascii lorsque j'ai commencé à programmer.

Si vous ne voulez pas que la ponctuation que vous aurez à faire plusieurs vérifications de gamme:

48 à 57 pour les numéros

65 à 90 pour les majuscules

97-122 pour minuscule

qui pourrait rendre l'approche RegEx plus lisible (je ne peux pas croire que je viens d'écrire que)

3

Une approche plus (peut-être pas aussi élégant que l'expression rationnelle):

NSCharacterSet* tSet = [NSCharacterSet characterSetWithCharactersInString: 
       @"abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"]; 
    NSCharacterSet* invSet = [tSet invertedSet]; 
    NSString* legalS = @"abcdA1"; 
    NSString* illegalS = @"asvéq1"; 

    if ([legalS rangeOfCharacterFromSet:invSet].location != NSNotFound) 
     NSLog(legalS); // not printed 

    if ([illegalS rangeOfCharacterFromSet:invSet].location != NSNotFound) 
     NSLog(illegalS); // printed 
+1

J'aime cette solution aussi. Merci – Adhamox

+0

VOUS MANQUEZ 'W' et 'w' !!!!!!!!!! –

+0

@OrArbel, en effet une honte :(Merci de corriger – Vladimir

0

mise en œuvre facile (prendre en haut, sous la direction juste pour rapide copier-coller):

Objective-C:

BOOL onlyEnglishAlphanumerical = ([self.textField.text rangeOfCharacterFromSet:[[NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"] invertedSet]].location == NSNotFound); 
self.textField.layer.borderWidth = (onlyEnglishAlphanumerical) ? 0 : 1; 
if (onlyEnglishAlphanumerical) 
{ 
    //Do the deal 
} 

Swift:

if (self.textField.text.rangeOfCharacterFromSet(NSCharacterSet.init(charactersInString:"abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ").invertedSet) == nil) 
{ 
    //Do the deal 
} 
Questions connexes