Comment pouvons-nous vérifier si une chaîne est composée uniquement de nombres. Je retire une sous-chaîne d'une chaîne et je veux vérifier si c'est une sous-chaîne numérique ou non.
NSString *newString = [myString substringWithRange:NSMakeRange(2,3)];
iphone
objective-c
cocoa-touch
ios
nsstring
Abhinav
la source
la source
.
caractère[[NSCharacterSet characterSetWithCharactersInString:@"0123456789."] invertedSet]]
invertedSet
renvoie une classe qui enveloppe l'ensemble sous sa forme créée et renvoie la valeur opposée pour toutes les requêtes. Mais je ne sais pas avec certitude.Je suggère d'utiliser la
numberFromString:
méthode de la classe NSNumberFormatter , comme si le nombre n'est pas valide, il renverra nil; sinon, il vous renverra un NSNumber.la source
NO
votre chaîne. A savoir également: ils reviennent égalementYES
pour des nombres remplis d'espaces. Btw, je viens d'ajouter un extrait de code à votre réponse, j'espère que cela ne vous dérange pas.Validez par expression régulière, par modèle
"^[0-9]+$"
, avec la méthode suivante-validateString:withPattern:
."^[0-9]+(.{1}[0-9]+)?$"
"."
."^[0-9]{4}$"
."."
et que la longueur est comprise entre 2 et 5."^[0-9]{2,5}$"
."^-?\d+$"
L'expression régulière peut être vérifiée sur le site Web en ligne .
La fonction d'assistance est la suivante.
Version Swift 3:
Test dans la cour de récréation.
la source
func numberOnly(string: String) -> Int { let expression = "" let regex = NSRegularExpression.init(pattern: expression, options: .caseInsensitive) let numberOfMatches = regex.numberOfMatches(in: string, options: .reportProgress, range: NSRange.init(location: 0, length: string.characters.count)) if numberOfMatches == 0 { return Int(string)! } return 0 }
Et j'ai eu une erreurPlayground execution aborted: error: Execution was interrupted, reason: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0).
return matchRange.location != NSNotFound;
^-?\d+$
, je l'ai vérifié sur le site: regex101.comVous pouvez créer un NSScanner et scanner simplement la chaîne:
Consultez la documentation de NSScanner pour plus de méthodes à choisir.
la source
isAtEnd
.Je pense que le moyen le plus simple de vérifier que chaque caractère dans une chaîne donnée est numérique est probablement:
Utilisez l'une des autres méthodes de fabrique NSCharacterSet si vous voulez un contrôle complet sur les caractères acceptables.
la source
Cette question originale concernait Objective-C, mais elle a également été publiée des années avant l'annonce de Swift. Donc, si vous venez ici de Google et que vous recherchez une solution qui utilise Swift, vous y allez:
la source
Solution Swift 3 si besoin de vérifier que la chaîne ne comporte que des chiffres:
la source
.inverted
d'actions inutiles et autres.pour être clair, cela fonctionne pour les entiers dans les chaînes.
Voici une petite catégorie d'aide basée sur la réponse de John ci-dessus:
dans un fichier .h
dans un fichier .m
usage:
la source
La solution Swift 3 pourrait être comme:
la source
La réponse de John Calsbeek est presque correcte mais omet certains cas de bord Unicode.
Selon la documentation de
decimalDigitCharacterSet
, cet ensemble comprend tous les caractères classés par Unicode commeNd
. Ainsi leur réponse acceptera, entre autres:१
(U + 0967 DEVANAGARI DIGIT ONE)᠑
(U + 1811 CHIFFRE MONGOLIEN UN)𝟙
(U + 1D7D9 CHIFFRE MATHÉMATIQUE À DOUBLE EFFET UN)Bien que dans un certain sens, cela soit correct - chaque caractère dans
Nd
correspond à un chiffre décimal - ce n'est certainement pas ce à quoi le demandeur s'attendait. Au moment de la rédaction de cet article, il existe 610 points de code classés commeNd
, dont seulement dix sont les caractères attendus0
(U + 0030) à9
(U + 0039).Pour résoudre le problème, spécifiez simplement exactement les caractères acceptables:
la source
Encore une autre option:
Exemple d'utilisation:
la source
Une extension de la réponse de @John Calsbeek , et une clarification des commentaires de @Jeff et @gyratory circus .
Les éléments suivants peuvent être ajoutés comme méthodes de catégorie pour
NSString
la source
Tester si une chaîne est un nombre peut être utile
la source
Extension Swift:
la source
Pour Swift 3
la source
Lorsque vous avez des chiffres issus de langues mixtes , qui utilisent (ou non) les formats de chiffres 0-9, vous devrez exécuter une expression régulière qui recherchera n'importe quel nombre, la prochaine chose à faire est de convertir tous les chiffres en 0- 9 format (si vous avez besoin de la valeur réelle):
la source
Le moyen le plus simple et le plus fiable est d'essayer de lancer comme
Double
, si le résultat estnil
- il ne peut pas être formé en un nombre légitime.Plus d'informations dans la documentation: https://developer.apple.com/documentation/swift/double/2926277-init
la source
Simple a écrit l'extension de chaîne:
la source