gpt4 book ai didi

regex - 如何在文本中屏蔽信用卡号掩码?

转载 作者:行者123 更新时间:2023-12-03 19:48:00 25 4
gpt4 key购买 nike

我的网站上有一个表格,我的客户使用此表格向我发送消息。有时他们会在消息上写下他们的信用卡号。所以这真的很关键。我想屏蔽这些信用卡号。但当然,卡号不会定期出现。

Example 1: 1111222233334444

Example 2: 4444 3333 2222 1111

Example 3: 4444-3333-2222-1111

Example 4: 4444 - 3333 - 2222 - 1111

Example 5: 4444--3333--2222--1111



所以我可以屏蔽例如 1、2 和 3。但是如果数字之间有多个空格或破折号,我就不能。

这是我的最后一个正则表达式:
preg_replace("/(?:\b| )([3456]\d{3})([ -]+){0,1}\d{4}([ -]+){0,1}\d{4}([ -]+){0,1}(\d{0})/", "$1********$2", $a1);

这个正则表达式的结果:

Result 1: 4444********1111

Result 2: 4444******** 1111

Result 3: 4444********-1111

Result 4: 4444******** - 1111

Result 5: 4444********--1111



那么我应该在正则表达式中做什么?谢谢。

最佳答案

我可以建议您将信用卡号码的验证与通过 UI 向用户展示该号码分开吗?假设您只存储了有效的信用卡号码,那么假设每个号码至少有 8 位数字可能是安全的。如果是这样,那么您可以使用一揽子正则表达式仅显示前 4 位和后 8 位数字:

$cc = "4444--3333--2222--1111";
echo preg_replace("/(\d{4}).*(\d{4})/", "$1********$2", $cc);

4444********1111

Demo

您可能会指出,这会在每个卡号之间放置相同数量的星星。但是,话又说回来,这是一件好事,因为它使窥探者更难找出真正的未屏蔽号码。

编辑:

这是一个更智能的正则表达式,它将在任何数字的中间部分加星标,只留下第一个和最后 4 个字符可见:
$cc = "4444--3333--2222--1111";
echo preg_replace("/(?<=.{4}).(?=.{4})/", "*", $cc);

4444**************1111

请注意,此解决方案不会从 11114444 中删除任何内容作为理论输入。

关于regex - 如何在文本中屏蔽信用卡号掩码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50246702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com