2015-05-20 49 views
0

沒有人知道在C#中如何查找字符串內的信用卡號碼。 我想阻止用戶在我們的應用程序的評論部分輸入一個CC#並給用戶一個警告.Net正則表達式尋找一個字符串中的信用卡號碼

我在互聯網上搜索的所有正則表達式只在字符串包含信用卡號(「 12345678910「)

例如

字符串評論=」稱爲客戶和給他的信用卡號碼12345678910.I將下訂單的客戶」

在這種情況下,我希望讓用戶知道此評論無法保存,因爲它包含信用卡號碼

這是我,而不是工作

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; 
     } 
    } 

感謝您的幫助

+4

構建正則表達式,比較它的輸入,以及是否有匹配會引發錯誤。哪裏有問題? – Eminem

+0

你會考慮哪種類型的信用卡? http://en.wikipedia.org/wiki/Bank_card_number你將不得不爲每種類型的信用卡都有Regexes。 – Shar1er80

+0

用戶在評論中放置信用卡號碼有問題嗎?如果是這樣,這聽起來像是一個培訓/紀律問題,而不是通過嘗試檢測代碼中的信用卡號碼而發生的事情。 –

回答

1

只需刪除開頭的^和每個正則表達式模式結尾的$並且它將起作用。這些說「必須先開始」/「必須結束」。即使使用多線選項,對於線路也是如此。

我想這些正則表達式模式,使輸入與信用卡號碼完全匹配。但不適用於文本內搜索。

+0

謝謝羅伯特對你的建議。幫我解決了問題 –

+0

不錯。你能標記爲已接受的答案嗎? ;-) –

0

包括正則表達式的示例代碼。然後,當你對框丟失焦點時,然後引發錯誤(通過警告(醜陋)或使表單失效或顯示註釋,因爲這是無效的),並且不要讓用戶提交表單。這不是C#可以自動執行的事情。你可以等到點擊事件來驗證它......但我會馬上去做。

0

使用信用卡匹配表達式,但對其做出否定斷言。這將觸發任何客戶端驗證,它應該是即插即用的。

1

我最終作出這一變化,似乎是working.THanks所有的回饋

//字符串評論= @「這是我的信用卡4418831001112089.Please作出命令我」;

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; 
    } 
相關問題