web-dev-qa-db-fra.com

Comment obtenir les quatre premières lettres d'une chaîne dans Swift 3?

J'essaie de valider le code IFSCCode dans Swift, mais le problème auquel je suis confronté est que je ne parviens pas à récupérer les quatre premières lettres d'une chaîne.

Exemple de code IFSC:

ABCD0200000

Voici à quoi ressemble un code IFSC:

  1. Les quatre premiers caractères du code IFSC sont toujours des alphabets
  2. Le cinquième caractère est toujours un zéro.
  3. Et le repos peut être n'importe quoi
  4. La longueur du code IFSC ne devrait pas être supérieure ou inférieure à 11, elle devrait en avoir 11.

J'ai écrit du code pour la validation du code ifs dans Objective C, mais je ne suis pas familier dans Swift, ce qui pose un problème de réplication identique dans Swift.

Voici le code que j'ai écrit en Objective C:

- (BOOL)validateIFSCCode:(NSString*)ifsccode {
  if (ifsccode.length < 4) {
    return FALSE;
  }
  for (int i = 0; i < 4; i++) {
    if (![[NSCharacterSet letterCharacterSet]
            characterIsMember:[ifsccode characterAtIndex:i]]) {
      return FALSE;
    }
  }
  if (ifsccode.length < 10) {
    return FALSE;
  }
  if ([ifsccode characterAtIndex:4] != '0') {
    return FALSE;
  } else {
    return TRUE;
  }
}

Dans Swift 3

func validateIfscCode(_ ifscCode : String) -> Bool{
    if(ifscCode.characters.count < 4){
        return false;
    }

    for( _ in 0 ..< 4){
        let charEntered = (ifscCode as NSString).character(at: i)
    }
    if(ifscCode.characters.count < 10){
        return false;
    }

    let idx = ifscCode[ifscCode.index(ifscCode.startIndex, offsetBy: 4)]

    print("idx:%d",idx)
    if (idx == "0"){
    }
    return true
}
35
Rani

Ceci est une validation simple utilisant une expression régulière. Le motif représente:

  • ^ doit être le début de la chaîne
  • [A-Za-z]{4} = quatre caractères A-Z ou a-z
  • 0un zéro
  • .{6} six caractères arbitraires
  • $ doit être la fin de la chaîne

Mis à jour à Swift 4

func validateIFSC(code : String) -> Bool {
  let regex = try! NSRegularExpression(pattern: "^[A-Za-z]{4}0.{6}$")
  return regex.numberOfMatches(in: code, range: NSRange(code.startIndex..., in: code)) == 1
}

PS: Pour répondre à votre question, vous obtenez les 4 premiers caractères de Swift 3 avec

let first4 = code.substring(to:code.index(code.startIndex, offsetBy: 4))

et dans Swift 4 simplement

let first4 = String(code.prefix(4))
22
vadian

Le moyen le plus simple d’obtenir le préfixe d’une chaîne est avec

// Swift 3
String(string.characters.prefix(4))

// Swift 4
string.prefix(4)

// Objective C
NSString *firstFour = [string substringToIndex:4];
137
Tim Vermeulen

Swift 5

string.prefix(4)  // Replace 4 with number of letters you want to get from the string

Cela fonctionne sur Xcode 10.2.

1
Jerry Chong