카드 번호 마스킹[마감]

0

질문

내가 하려고 마스크 카드 번호와 함께 정규식으로 이루어져 있습니다. 6 고 마지막 2 문자로 표시할 수 있는 다른해야한다"*".

let cardNumber: String = "5890040000000016"

print("Output: ", cardNumber.mask(regexPattern:"XXXXXXX")) // Output: 589004********16

어떻게 할 수 있습니는 스?

masking swift
2021-11-17 13:33:24
3

최고의 응답

1

당신의 질문에 포함 2 개 중요한 부분:

Regex 과 일치하는 모든 문자는 하지만 처음 6 고 마지막 2

let regexPattern = "(?<=.{6}).(?=.*.{2}$)"

에서 확장 String 는 regex 그리고 마스크:

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

2021-11-17 14:32:06

보일 수 있습니다 더 좋은 사용 #"..."#"..." 의 캐릭터 탈출을 위한 정규 표현식
George

내가 있어 타의 추출에서 모든@조지. 지금은 깨끗이 하늘
Mojtaba Hosseini
1

연결할 수 있습 함께 하위 문자열:

let cardNumber = "5890040000000016"

let start = cardNumber.startIndex ..< cardNumber.index(cardNumber.startIndex, offsetBy: 6)
let end = cardNumber.index(cardNumber.endIndex, offsetBy: -2) ..< cardNumber.endIndex
let result = cardNumber[start] + Array(repeating: "*", count: cardNumber.count - 8) + cardNumber[end]
print(result)

// Prints: 589004********16
2021-11-17 14:21:43

는 regex? :/
Mojtaba Hosseini

@MojtabaHosseini 지 regex 하지만 그것을 달성한 결과(고 빠를 것이 너무)
George

점에 대해 무엇을 가지고 있지만 동적 regex?
Mojtaba Hosseini

네@감사합니다,그 멋진 그것은 작동하지만 내가 궁금하다면 나는 그것을 할 수 있습 regex.
Kaan Ozdemir

@KaanOzdemir 당신이 필요 해요 정교한 요구 사항에 문제가 있기 때문에 당신이 제게 아무 의미 없으로 문제를 해결하기 regex.
Alexander
0

아마도 당신이 찾고있는 무언가를 위해 다음과 같다:

let s = "5890040000000016"
let patt = ##"^(\d{6})(.*)(\d{2})$"## // this is your pattern
let reg = try! NSRegularExpression(pattern: patt, options: [])
if let m = reg.firstMatch(in: s, options: [], range: NSRange(s.startIndex..<s.endIndex, in: s)) {
    let r = m.range(at:2)
    let result = s.replacingCharacters(in: Range(r, in:s)!, with: String(repeating: "X", count: r.length))
    print(result) // 589004XXXXXXXX16
}
2021-11-17 13:46:10

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................