簡體   English   中英

如何屏蔽字符串的字母和數字

[英]How to mask letters and numbers of a string

我有以下與數字完美搭配的內容,但我也不知道如何讓它與字母一起使用。

var word = "4556364607935616";

function mask() {
  if (word.length <= 4) {
    return word;
  } else {
    var masked =
      word.substring(0, word.length - 4).replace(/\d/g, "#") +
      word.substring(word.length - 4, word.length);
    return masked;
  }
}

我猜\\d目標數字? 我不確定在哪里可以找到這種事情的參考指南。 任何幫助將不勝感激!

您需要做的就是稍微改變您的正則表達式,使其也適用於字母。 因此,將/\\d/g更改為/[az\\d]/gi ,其中:

  • [az\\d]匹配 a 到 z 范圍內的字符以及數字和
  • i標志確保小寫和大寫字母都匹配。

片段:

 var word = "4f563a46jy7u35616"; function mask() { if (word.length <=4) { return word } else { var masked = word.substring(0, word.length - 4).replace(/[az\\d]/gi,"#") + word.substring(word.length - 4, word.length) return masked; } } console.log(mask(word));

有效的解決方案是不屏蔽字符串,而是構建一個具有提供長度的新字符串

var word = "4556364607935616";

function mask() {
  var LENGTH = 4
  var CHAR = '#'
  if (word.length <= LENGTH) {
    return word
  }
  var leftSideLength = word.length - LENGTH
  var result = ''
  while (leftSideLength--) result += CHAR
  return result + word.substring(word.length - 4, word.length)
}

下面顯示的性能優勢

 var word = "4556364607935616"; function maskNotRegex() { var LENGTH = 4 var CHAR = '#' if (word.length <= LENGTH) { return word } var leftSideLength = word.length - LENGTH var result = '' while (leftSideLength--) result += CHAR return result + word.substring(word.length - 4, word.length) } // Credit: Angel Politis's anwer on this Post function maskRegex() { if (word.length <= 4) { return word } else { var masked = word.substring(0, word.length - 4).replace(/[az\\d]/gi, "#") + word.substring(word.length - 4, word.length) return masked; } } // Performance test // Credit: https://stackoverflow.com/a/17943511/2308005 var iterations = 1000000; console.time('Using regex'); for (var i = 0; i < iterations; i++) { maskRegex(word); }; console.timeEnd('Using regex') console.time('Not using regex'); for (var i = 0; i < iterations; i++) { maskNotRegex(word); }; console.timeEnd('Not using regex')

要獲取有關正則表達式性能的更多信息,請閱讀codinghorror 帖子

帶有教程的 RegExp 參考指南http : //www.regular-expressions.info/

RegExp Playgroundhttps : //regexr.com/ (學習、構建和測試正則表達式的在線工具)

如果您需要避免替換破折號-等,請使用單詞字符\\w (包括下划線):

 var word="abc-364-079-5616", masked=word.replace(/\\w/g, "#"); //[a-zA-Z0-9_] if(word.length > 4) { masked = masked.substring(0, word.length-4) + word.substring(word.length-4); } else { masked = word; } console.log(masked); // "###-###-###-5616"

以下是上一個示例中masked更改的方式:

  • masked = "###-###-###-####"
  • masked = "###-###-###-5616"

沒有正則表達式示例

這是一個不使用正則表達式(屏蔽任何字符)的示例:

 var word = "abc6364607935616", masked = word; // word & masked are the same if(word.length > 4) { masked = new Array(word.length - 4).join('#'); // create 4 less than word masked += word.substring(word.length - 4); // add on 4 last characters } console.log(masked); // "###########5616"

以下是上一個示例中masked更改的方式:

  • masked = "abc6364607935616"
  • masked = "############"
  • masked = "############5616"

這是我得到的最短的。 您可以使用正則表達式模式( \\w(?=\\w{4}) )來屏蔽最后 4 個字母,如下所示:

 let word = "4f563a46jy7u35616"; function mask() { if (word.length <= 4) { return word; } else { return word.replace(/\\w(?=\\w{4})/g, "#"); } } console.log(mask(word));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM