C++正则表达式:隐藏银行卡号倒数第5-8位数字,卡号的长度不是定长(16或19位),所以只能倒数.

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++正则表达式:隐藏银行卡号倒数第5-8位数字,卡号的长度不是定长(16或19位),所以只能倒数.相关的知识,希望对你有一定的参考价值。

例:88888888888****8888

参考技术A 正则表达式: \d4(?=\d4$)
替换字符串: ****本回答被提问者采纳
参考技术B 这个问题不需要使用正则表达式吧
把这个数据倒序
然后影藏第5-8位数字就可以了
参考技术C [0-9]{19} 参考技术D #include<regex>
#include<string>
#include<iostream>
int main()
    std::string s"56786897760123445678";
    std::regex rgx("[\\\\d]4([\\\\d]4)$");
    auto ss=regex_replace(s,rgx,"****$1");
    std::cout<<ss<<std::endl;

使用正则表达式验证信用卡号

【中文标题】使用正则表达式验证信用卡号【英文标题】:Validating credit card number using regular expression 【发布时间】:2019-02-26 10:53:25 【问题描述】:

信用卡号格式为:“nnnn nnnn nnnn nnnn”

我用这个模式测试了下面四个字符串,但是 temp3 字符串意外返回 true。

我不知道怎么了。我正在使用的正则表达式应该准确地验证四位数字和一个空格,但是 temp3 尽管不匹配此模式,但仍返回 true。

String temp1 = " adfs 1111 2222 3333 4444 fadad";  // outer test
String temp2 = "11 11 2222 3333 4444"; // inner test
String temp3 = "11111 2222 3333 4444"; // inner test
String temp4 = "1111 2a222 3333 4444"; // inner test

public String chkContainCardno(String inputstr) 

    Pattern p = Pattern.compile("[0-9]4\\s[0-9]4\\s[0-9]4\\s[0-9]4");
    Matcher m = p.matcher(inputstr);

    if (m.find()) 
        return m.group(0);
     else 
        return ErrMsg.Does_Not_Contain_Card_No;
    

[测试结果]

temp1 : adfs 1111 2222 3333 4444 fadad : true 1111 2222 3333 4444

temp2:11 11 2222 3333 4444:假

temp3 : 11111 2222 3333 4444 : true 1111 2222 3333 4444 我不明白

temp4:1111 2a222 3333 4444:假

【问题讨论】:

第 1 和第 3 是唯一匹配模式的输入以查找 4 组 4 位数字 有一个实际的算法来检查信用卡是否是真实的信用卡号,称为Luhn algorithm 【参考方案1】:

第三个测试通过了,因为您的模式周围没有锚点。您应该在任一端添加\b,即"\\b[0-9]4\\s[0-9]4\\s[0-9]4\\s[0-9]4\\b",以强制在单词边界内匹配。

【讨论】:

【参考方案2】:

你可以用这个:

"(\\b\\d4\\s\\d4\\s\\d4\\s\\d4\\b)"

b - 单词边界

d - 数字

【讨论】:

以上是关于C++正则表达式:隐藏银行卡号倒数第5-8位数字,卡号的长度不是定长(16或19位),所以只能倒数.的主要内容,如果未能解决你的问题,请参考以下文章

使用正则表达式前瞻将信用卡号拆分为 4 块?

java校验银行卡号

java检验银行卡号

使用正则表达式验证信用卡号

银行卡号每隔4位插入空格 (再用户填写银行卡号的时候挺有用的) IE9+

vue手机号按344分隔,银行卡号每4位空格分隔