【问题标题】:Find a credit card within a string在字符串中查找信用卡
【发布时间】:2015-01-16 23:51:57
【问题描述】:

我正在寻找一种使用 C# 在字符串中检测信用卡的方法。正则表达式是一种可能性。我不想检测字符串是否是信用卡。

例如

string text = "Hi mum, here is my credit card 1234-1234-1223-1234. Don't tell anyone";
bool result = TextContainsCreditCard(text);
if (result)
  throw new InvalidOperationException("Don't give people your credit card!");

【问题讨论】:

  • 我完全不清楚。
  • 你为什么不使用string.contains可能性?
  • String.Contains 是否与正则表达式一起使用?信用卡可以是多种格式。
  • 这就够了吗? text.Contains("credit card") ;-)
  • 这对您有帮助吗:stackoverflow.com/questions/72768/… ?

标签: c# regex


【解决方案1】:

你可以像使用正则表达式

(\d{4}[\s-]?){4}

然后将您想要的任何字符作为分隔符放到[\s-] 现在它们只是空格和减号

这允许分隔符在任何位置(\d[\s-]?){16},如1 2341234-12341 234

【讨论】:

    【解决方案2】:

    好吧,如果您的分隔符只有空格或 -,那么检测信用卡的正则表达式将是

    ([0-9]{4}(-| )){3}[0-9]{4}
    

    或者也许有更短或更好的选择。

    【讨论】:

      【解决方案3】:

      我已经起草了这个算法(仅作为注释放置它的格式会很糟糕)

      1. 在 (-) 上拆分字符串
      2. 查看字符串是否包含数值。
      3. 查看是否有 4 个以上的部分
      4. 查看parts[0] + parts[1](即连续四个)
      5. 如果是,返回true,如果不是,返回false?

      【讨论】:

      • 想必不是每个人都会整齐划定自己的卡号
      • 我不擅长实施,但@AlexK。我认为检查是否有 16 位数字,并确保它们形成信用卡,很难掌握一个“完美”的算法。
      【解决方案4】:

      您可以使用下面的正则表达式来做到这一点

      (\d{4}-?){4}
      

      这里是 grep 的示例输出。

      $ echo "Hi mum, here is my credit card 1234-1234-1223-1234. Don't tell anyone"|grep -Po "(\d{4}-?){4}"
      1234-1234-1223-1234
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-13
        • 1970-01-01
        • 1970-01-01
        • 2011-01-11
        • 1970-01-01
        • 2012-01-18
        • 1970-01-01
        相关资源
        最近更新 更多