我有一个有趣的挑战,我在这里找不到答案。我有一个文本字符串,它可能包含一个账号。范例:
"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。
你的方法是什么?
谢谢你,谢谢
5条答案
按热度按时间wdebmtf21#
您可以将上述所有内容与以下内容相匹配:
.并将其替换为
*
xstrlen(match) - 4
+\1
,参见a demo on regex101.com。在
JavaScript
中:参见a demo on ideone.com。
csbfibhn2#
借用Jan的正则表达式模式,它也可以扩展为捕获最后一个数字(参见下面的示例)
***注意:***他使用
replace()
的方法更好,为了清晰起见,我建议使用它。这只是为了提供一种使用match()
的替代方法ndh0cuux3#
91zkwejq4#
使用带有
look ahead
技巧的正则表达式,只需查找并替换为
g0czyy6m5#