Ваш вопрос содержит 2 важные части:
Регулярное выражение, которое соответствует всем символам, кроме первых 6 и последних 2
let regexPattern = "(?<=.{6}).(?=.*.{2}$)"
и
Расширение на String
это берет регулярное выражение и маскирует его:
extension String {
func masked(matching regexPattern: String, with template: String = "*") throws -> String {
let regex = try NSRegularExpression(pattern: regexPattern, options: NSRegularExpression.Options.caseInsensitive)
let range = NSMakeRange(0, count)
return regex.stringByReplacingMatches(in: self, options: [], range: range, withTemplate: template)
}
}
Использование:
let cardNumber = "5890040000000016"
let regexPattern = "(?<=.{6}).(?=.*.{2}$)"
print("Output:", try! cardNumber.masked(matching: regexPattern))
Выход: 589004********16
#"..."#
скорее, чем"..."
из-за раздражающего персонажа, убегающего для регулярного выражения