2017-09-10 1 views
0

Quelqu'un sait comment Couper ou éliminer les caractères d'une chaîne? J'ai des données d'UIlabel comme "ABCDE1000001" et je n'ai besoin que des chiffres. Une idée? garniture? concat? toute autre solution?Swift 3 Caractères de recadrage

J'essaie aussi cela, mais la recherche d'une autre solution

let cardtrim = String.trimmingCharacters(in: CharacterSet(charactersIn: "ABCDEF")) 
+1

si l'entrée est 'A1B2C3'? Que faire s'il n'y a pas de chiffres du tout? –

+0

Vérifie ma solution, il filtre tout sauf les nombres. –

Répondre

0

Votre code fonctionne parfaitement, mais vous devez appeler la variable de chaîne dans laquelle vous stockez la valeur que vous voulez couper.

let stringToTrim = "ABCDE1000001" 
let cardtrim = stringToTrim.trimmingCharacters(in: CharacterSet(charactersIn: "ABCDEF")) //value: 1000001 

Une solution plus générique est d'utiliser CharacterSet.decimalDigits.inverted pour ne garder que les chiffres de la chaîne.

let cardtrim = stringToTrim.trimmingCharacters(in: CharacterSet.decimalDigits.inverted) 

Sachez que trimmingCharacters supprime uniquement les caractères du characterset depuis le début et la fin de la chaîne, donc si vous avez une chaîne comme ABC101A101 et que vous voulez supprimer toutes les lettres de, vous devrez utiliser une approche différente (par exemple des expressions régulières).

+0

homme. laisse moi te serrer dans mes bras. Je vous remercie! –

+1

Ce *** n'est pas la meilleure solution ***. Dans différents endroits, vous n'avez aucune idée de ce que pourraient être les «chiffres décimaux». Par exemple - inclut-il le "." ? – Fattie

+0

@Fattie 'CharacterSet' utilise les spécifications Unicode, donc tous ses sous-ensembles sont AFAIK indépendants des paramètres régionaux. –

-1

Cette extension retourne les chiffres dans une chaîne qui est exactement ce dont vous avez besoin

extension String { 

    var digits: String { 
     return components(separatedBy: CharacterSet.decimalDigits.inverted) 
      .joined() 
    } 
} 

Source

1

Tenir compte que trimmingCharacters supprime uniquement (consécutifs) avant ou arrière des caractères qui correspondent au jeu de caractères.

Pour supprimer tous caractères non numériques dans une chaîne que je recommande l'expression régulière

let string = "ABC12DE100YU0001" 
let trimmedString = string.replacingOccurrences(of: "\\D", with: "", options: .regularExpression) 
// -> "121000001" 
1

Essayez ceci au lieu de coder en dur l'charactersIn, c'est une solution dynamique qui fonctionne sur d'autres variations de strings que seulement ABCDEF.

extension String { 

    var numbersOnly: String { 

     let numbers = self.replacingOccurrences(
      of: "[^0-9]", 
      with: "", 
      options: .regularExpression, 
      range:nil) 
     return numbers 
    } 
} 

let string = "A77BC66DE1001".numbersOnly // 77661001 
+0

C'est plutôt cool! la définition de la chaîne d'extension. Merci mec! –

+0

Vous devriez envisager d'utiliser quelque chose comme ceci et non des valeurs de code fixe. Si votre chaîne semble différente, votre code ne fonctionnera pas. –

+0

bon point. à des fins générales. Merci mec! –

0

Tu dois obtenir Swifty:

let string = "ABC12DE100YU0001".filter { ("0"..."9").contains($0) } 

En extension:

extension String { 

    func filterLetters() -> String { 
     return filter { ("0"..."9").contains($0) } 
    } 
}