How to get first four letters from string in Swift 3?
Swift3Swift3 Problem Overview
I am trying to do IFSCCode validation in swift, but the problem I'm facing is I am not able to fetch the first four letters in string.
IFSC Code example:
> ABCD0200000
This is how an IFSC Code looks:
- First four characters in IFSC Code are always alphabets
- Fifth character is always a zero.
- And rest can be anything
- The length of IFSC Code should not be greater than or less than 11. It should 11 in length.
I have written code for ifs code validation in Objective C, but I am not that familiar in Swift so getting a problem in replicating the same in Swift.
The following is the code which I have written in 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;
}
}
In 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
}
Swift3 Solutions
Solution 1 - Swift3
The easiest way to get a string's prefix is with
// Swift 3
String(string.characters.prefix(4))
// Swift 4 and up
string.prefix(4)
// Objective-C
NSString *firstFour = [string substringToIndex:4];
Solution 2 - Swift3
This is a simple validation using regular expression. The pattern represents:
^
must be the beginning of the string[A-Za-z]{4}
= four characters A-Z or a-z0
one zero.{6}
six arbitrary characters$
must be the end of the string
Updated to 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: To answer your question, you get the first 4 characters in Swift 3 with
let first4 = code.substring(to:code.index(code.startIndex, offsetBy: 4))
and in Swift 4 simply
let first4 = String(code.prefix(4))
Solution 3 - Swift3
Swift 5
string.prefix(4) // Replace 4 with number of letters you want to get from the string
This is working on Xcode 10.2.
Solution 4 - Swift3
Extention to get all substring
extension String {
func first(char:Int) -> String {
return String(self.prefix(char))
}
func last(char:Int) -> String
{
return String(self.suffix(char))
}
func excludingFirst(char:Int) -> String {
return String(self.suffix(self.count - char))
}
func excludingLast(char:Int) -> String
{
return String(self.prefix(self.count - char))
}
}