【问题标题】:.Net regex to look for a credit card number in a string.Net 正则表达式在字符串中查找信用卡号
【发布时间】:2015-05-20 19:22:27
【问题描述】:

有谁知道在 C# 中如何在字符串中查找信用卡号。 我想阻止用户在我们应用程序的 cmets 部分输入 CC# 并向用户发出警告

我在互联网上搜索的所有正则表达式只有在字符串包含信用卡号(“12345678910”)时才有效

例子

string comment ="客户打电话给他的信用卡号码 12345678910。我将为客户下订单"

在这种情况下,我想让用户知道该评论无法保存,因为它包含信用卡号

这是我拥有但不工作的示例代码

public class CreditCardValidator
    {
        public CreditCardValidator()
        {
            //These are the regex for all the avialble Credit  cards.http://www.regular-expressions.info/creditcard.html

            this.Patterns = new string[] { "^4[0-9]{12}(?:[0-9]{3})?$", "^5[1-5][0-9]{14}$", "^3[47][0-9]{13}$", "^3(?:0[0-5]|[68][0-9])[0-9]{11}$", "^6(?:011|5[0-9]{2})[0-9]{12}$","^(?:2131|1800|35\\d{3})\\d{11}$" };
        }
        public string[] Patterns { get; set; }
        public  bool HasCreditCardNumber(string input)
        {
            foreach (var pattern in Patterns)
            {
                if (Regex.IsMatch(input, pattern, RegexOptions.Multiline))
                {
                    return true;
                }                   
            }

            return false;
        }
    }

感谢您的帮助

【问题讨论】:

  • 构建正则表达式,将输入与它进行比较,如果匹配则引发错误。问题出在哪里?
  • 您将考虑哪些类型的信用卡? en.wikipedia.org/wiki/Bank_card_number您将不得不为每种类型的信用卡使用正则表达式。
  • 您是否遇到过用户在 cmets 中输入信用卡号码的问题?如果是这样,这听起来像是一个培训/纪律问题,而不是应该通过尝试检测代码中的信用卡号码来解决的问题。
  • @Share1er80 ,我们处理所有主要的信用卡。这是我到目前为止的示例代码,但这似乎不起作用
  • @David Amo,我完全同意你的观点,但我输掉了这场战斗

标签: c# regex


【解决方案1】:

只需删除每个正则表达式模式开头的^ 和末尾的$ 即可。这些说“必须开始于”/“必须结束于”。即使使用多行选项,行仍然适用。

我猜这些正则表达式模式完全匹配信用卡号的输入。但不适用于文本搜索。

【讨论】:

  • 感谢罗伯特的建议。帮我解决了问题
【解决方案2】:

我最终做出了这个改变,并且似乎正在工作。感谢大家的反馈

//string comment = @"这是我的信用卡4418831001112089。请帮我下单";

public static bool HasCreditCardNumber(string input)
    {
        MatchCollection matches = Regex.Matches(input, @"\b4[0-9]{12}(?:[0-9]{3})?\b|\b5[1-5][0-9]{14}\b|\b3[47][0-9]{13}\b|\b3(?:0[0-5]|[68][0-9])[0-9]{11}\b|\b6(?:011|5[0-9]{2})[0-9]{12}\b|\b(?:2131|1800|35\d{3})\d{11}\b");
        if (matches.Count > 0)
        {
            return true;
        }            
        return false;
    }

【讨论】:

    【解决方案3】:

    包括正则表达式。然后,当您失去对框的关注时,然后引发错误(通过警报(丑陋)或通过使表单无效或显示说明这是无效的,因为...)并且不要让用户提交表单。这并不是 C# 可以自动完成的事情。你可以等到点击事件来验证它......但我会马上去做。

    【讨论】:

      【解决方案4】:

      使用信用卡匹配表达式,但对其进行否定断言。这将触发任何客户端验证,它应该是即插即用的。

      【讨论】:

        猜你喜欢
        • 2015-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-11
        • 1970-01-01
        • 2022-01-20
        • 2017-06-04
        相关资源
        最近更新 更多