2017-04-20 21 views

回答

2

你可以試試這個:

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);

+0

我最終將您的解決方案與我的想法相結合。 我需要用正則表達式來做,因爲效果的想法是在Keypress事件中看到它。 –

-2

如果它的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"; 

*它不應該是

+1

除非是node.js中 –

+0

@BrianMcCutchon ...你讓我在那裏。然而,如果是這樣的話,我會期待一個[tag:nodejs]標籤。 –

+0

我只是想做一個可視化效果,卡片的整個數字我保留在另一個變量。現在我只需要正如我上面解釋的那樣掩飾正則表達式。 –

0

答案顯然滿足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));

這確保了模式嘗試任何替換之前匹配。例如,在第三個測試用例中,它返回一個空字符串。除了問題中給出的模式之外,該模式可以更新以匹配其他信用卡模式。

0

您可以切分前四位數字併爲其餘部分應用替換。

console.log(
 
    ['4567 6365 7987 3783', '3457 732837 82372'].map(
 
     s => s.slice(0, 4) + s.slice(4).replace(/\d(?=.*)/g, '*') 
 
    ) 
 
);

相關問題