परिणाम कुछ ऐसा होना चाहिए,

console.log(mask('12345')) // **** 345
console.log(mask('12345 6 789')) // **** 789
console.log(mask('1234 5678 9101 1213')) // **** 213

मैंने कुछ ऐसा करने की कोशिश की है,

const mask = (string) => `**** ${string.slice(-3)}`

लेकिन मैं सोच रहा हूं कि रेगेक्स/replace के साथ बेहतर दृष्टिकोण है या नहीं?

0
Mike K 5 अगस्त 2020, 10:39

3 जवाब

सबसे बढ़िया उत्तर

मेरी राय में आपका वर्तमान दृष्टिकोण काफी पठनीय है। लेकिन अगर आप रेगुलर एक्सप्रेशन का उपयोग करना चाहते हैं, तो एक तरीका यह हो सकता है कि .replace() का उपयोग अपनी स्ट्रिंग में सभी वर्णों को बदलने के लिए किया जाए, जबकि अंतिम तीन को /.+(.{3})$/ का उपयोग करके समूहीकृत किया जाए। फिर, आप $1 का हवाला देकर प्रतिस्थापन स्ट्रिंग में समूह का उपयोग कर सकते हैं:

const mask = string => string.replace(/.+(.{3})$/, "**** $1");
console.log(mask('12345')) // **** 345
console.log(mask('12345 6 789')) // **** 789
console.log(mask('1234 5678 9101 1213')) // **** 213

रेगेक्स ब्रेकडाउन:

  • .+: किसी भी वर्ण का मिलान करें (एक या अधिक)
  • (.{3})$: अंतिम तीन मनमाना वर्णों को समूहित करें। यह कैप्चर किया गया समूह प्रतिस्थापन स्ट्रिंग में $1 का उपयोग करके संदर्भ हो सकता है।
1
Nick Parsons 5 अगस्त 2020, 10:56

आप केवल अंतिम 3 अंक प्राप्त करने के लिए नियमित अभिव्यक्ति का उपयोग कर सकते हैं

mask = (n) => "**** " + n.match(/(\d{3})$/)[0];
console.log(mask("12345")); // **** 345
console.log(mask("12345 6 789")); // **** 789
console.log(mask("1234 5678 9101 1213")); // **** 213

यदि आपकी संख्या 3 से कम लंबाई की हो सकती है तो आप इसके बजाय इसका उपयोग कर सकते हैं

mask = (n) => n.replace(/(.+)(?=(\d){3}$)/g, "****");
if (mask.length != 0) console.log(mask("12345")); // **** 345
console.log(mask("12345 6 789")); // **** 789
console.log(mask("1234 5678 9101 1213")); // **** 213
1
Sven.hig 5 अगस्त 2020, 11:29

तुम कोशिश कर सकते हो

var mask = "12345"; //Your characteres to mask
var lastthree = mask.substr(mask.length - 3);
var final = "**** "+lastthree;
0
codelch 5 अगस्त 2020, 10:42