我想用JavaScript屏蔽一部分字符串。使用RegExp屏蔽字符串的一部分
例如面膜的信用卡號碼第二和第三部分是這樣使用正則表達式:
4567 6365 7987 3783
→4567 **** **** 3783
3457 732837 82372
→3457 ****** 82372
我只是想保持前4號和最後5個字符。
這是我第一次嘗試:/(?!^.*)[^a-zA-Z\s](?=.{5})/g
我想用JavaScript屏蔽一部分字符串。使用RegExp屏蔽字符串的一部分
例如面膜的信用卡號碼第二和第三部分是這樣使用正則表達式:
4567 6365 7987 3783
→4567 **** **** 3783
3457 732837 82372
→3457 ****** 82372
我只是想保持前4號和最後5個字符。
這是我第一次嘗試:/(?!^.*)[^a-zA-Z\s](?=.{5})/g
你可以試試這個:
var cardnumber = '4567 6365 7987 3783';
var first4 = cardnumber.substring(0, 4);
var last5 = cardnumber.substring(cardnumber.length - 5);
mask = cardnumber.substring(4, cardnumber.length - 5).replace(/\d/g,"*");
console.log(first4 + mask + last5);
如果它的JavaScript做正則表達式的遮蔽,你已經失敗了,因爲JS應該永遠不需要知道原卡號,除了當你剛剛從用戶那裏收到它並首次發送給服務器時,在這種情況下,你不應該掩蓋它,以便用戶檢查錯誤。
我真的無法幫到你,你已經以最糟糕的方式失敗了。
服務器端,如果該號碼已經被分爲空間*,那麼一種選擇是:(PHP中,但同樣的想法適用於所有)
$parts = explode(" ",$fullnumber);
$first = array_shift($parts);
$last = array_pop($parts);
$middle = implode(" ",$parts);
$mask = preg_replace("/\d/","*",$middle);
$result = "$first $mask $last";
*它不應該是
除非是node.js中 –
@BrianMcCutchon ...你讓我在那裏。然而,如果是這樣的話,我會期待一個[tag:nodejs]標籤。 –
我只是想做一個可視化效果,卡片的整個數字我保留在另一個變量。現在我只需要正如我上面解釋的那樣掩飾正則表達式。 –
答案顯然滿足OP。下面是僅使用的正則表達式另一種解決方案:
function starry(match, gr1, gr2, gr3) {
var stars = gr2.replace(/\d/g, '*');
return gr1 + " " + stars + " " + gr3;
}
function ccStarry(str) {
var rex = /(\d{4})\s(\d{4}\s\d{4}|\d{6})\s(\d{4}|\d{5})/;
if (rex.test(str))
return str.replace(rex, starry);
else return "";
}
var s1 = "4567 6365 7987 3783";
var s2 = "3457 732837 82372";
var s3 = "dfdfdf";
console.log(ccStarry(s1));
console.log(ccStarry(s2));
console.log(ccStarry(s3));
這確保了模式嘗試任何替換之前匹配。例如,在第三個測試用例中,它返回一個空字符串。除了問題中給出的模式之外,該模式可以更新以匹配其他信用卡模式。
您可以切分前四位數字併爲其餘部分應用替換。
console.log(
['4567 6365 7987 3783', '3457 732837 82372'].map(
s => s.slice(0, 4) + s.slice(4).replace(/\d(?=.*)/g, '*')
)
);
我最終將您的解決方案與我的想法相結合。 我需要用正則表達式來做,因爲效果的想法是在Keypress事件中看到它。 –