我遇到了一个有趣的挑战,在这里找不到答案。我有一串文字,可能包含一个帐号。
例子:

"Hi, my account number is 1234 5678 9012 2345 and I'm great."

帐号可以由用户输入,有多种形式:

以下是基本和潜在的可能性:
1234 1234 1234 1234
1234 1234 1234 1234 1
BE12 1234 1234 1234

1234-1234-1234-1234
1234.1234.1234.1234
1234123412341234
12341234 1234 1234

1234-1234-1234-1234-1
1234.1234.1234.1234.1
12341234123412341
12341 234 1234 12341

BE12-1234-1234-1234
be12-1234-1234 1234
Be12.1234.1234-1234
BE12123412341234

(基本上是带连字符,空格或点的中间整数,但IBAN格式除外,其开头有两个字符)

我需要的输出是所有被屏蔽的东西,除了最后四位数字。
"Hi, my account number is **** **** **** 2345 and I'm great."

我认为我应该如何解决这个问题:
  • 分析每个字符串,然后尝试找到上述帐号。模式
  • 创建一个神奇的正则表达式来替换帐号。他们需要我
  • 如果有帐号,请使用此RegEx进行操作。

  • 你会怎么做?

    谢谢!

    最佳答案

    您可以将上述所有内容与以下内容匹配:

    \b[\dX][-. \dX]+(\d{4})\b
    

    ...并替换为* x strlen(match) - 4 + \1,请参阅a demo on regex101.com

    JavaScript中:
    var string = "Hi, my account number is 1234 5678 9012 2345 and I'm great.";
    var new_string = string.replace(/\b[\dX][-. \dX]+(\d{4})\b/g, function(match, capture) {
        return Array(match.length-4).join("*") + capture;
    });
    print(new_string);
    

    参见a demo on ideone.com

    关于javascript - Javascript-屏蔽字符串中的帐号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42939152/

    10-09 17:28