首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Regex遮挡信用卡号码除了最后四位数字之外

如何使用Regex遮挡信用卡号码除了最后四位数字之外
EN

Stack Overflow用户
提问于 2020-06-10 13:14:01
回答 1查看 1.1K关注 0票数 0

我试图解决一个问题,我输入的人的名字,他的信用卡号码。它必须识别出卡是哪一家公司的,并且除了最后四位以外,还必须隐藏数字的数字。例如,下面的行

代码语言:javascript
复制
'Preston: 345678901234567'
'601234123456737 is a Discover card'

会变到

代码语言:javascript
复制
'Preston: ....4567'
'....6737 is a Discover card'

到目前为止,我已经完成了如何使用http://www.regular-expressions.info/creditcard.html验证对信用卡公司的输入。

代码语言:javascript
复制
American Express: ^3[47][0-9]{13}$ 
Discover: ^6(?:011|5[0-9]{2})[0-9]{12}$
MasterCard: ^(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}$
Visa: ^4[0-9]{12}(?:[0-9]{3})?$

除了最后四位数字之外,我不知道如何掩蔽其余的数字,并且没有太多的文章和资源可供帮助。

EN

回答 1

Stack Overflow用户

发布于 2020-06-10 18:43:18

下面的代码演示了如何在所有数字上屏蔽CC号码,但最后四位除外。

expression

  • Mask

  • 从用户(名称、号码)

  • 中获取数据,如果每个卡的数字与普通的

  • 匹配,则在循环检查号码中对每个卡片

  • 的正则表达式进行检查,但最后四个

  • 打印循环

F 213

代码语言:javascript
复制
use strict;
use warnings;
use feature 'say';

my %re_cc = (
        'American Express'  => qr/^3[47][0-9]{13}$/,
        'Discover'          => qr/^6(?:011|5[0-9]{2})[0-9]{12}$/,
        'MasterCard'        => qr/^(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}$/,
        'Visa'              => qr/^4[0-9]{12}(?:[0-9]{3})?$/
);

while( my $record = <DATA> ) {
    chomp $record;
    my( $name, $number ) = split ' ', $record;
    while( my ($cc_name,$cc_regex) = each %re_cc ) {
        if( $number =~ /$cc_regex/ ) {
            $number =~ s/(\d+)(?=\d{4})/'*' x length($1)/e;
            say "$name\t$number\n$number is a $cc_name";
            last;
        }
    }
}

__DATA__
Preston     345678901234567

输出

代码语言:javascript
复制
Preston ***********4567
***********4567 is a American Express
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62304515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档