कार्ड नंबर मास्किंग [बंद]

0

सवाल

मैं कोशिश कर रहा हूँ करने के लिए मुखौटा कार्ड नंबर के साथ regex. पहले 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

हो सकता है अच्छे लग रहे करने के लिए उपयोग #"..."# के बजाय "..." क्योंकि कष्टप्रद चरित्र से बचने के लिए regex
George

मैं मिल गया है ग्रस्त है कि बदसूरत बचने पर सभी @जॉर्ज । अब यह साफ है के रूप में स्वर्ग
Mojtaba Hosseini
1

आप कर सकते हैं जुटना substrings एक साथ:

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ý
..................................................................................................................