2012-02-24 147 views
-1

這是我的場景。我正在做一個電話號碼註冊組件,它將拒絕一些帶有特定前綴的號碼(例如「95973」或「95949」)。我已經將這些前綴存儲在數據庫中了。C#「Like」搜索類似於SQL查詢「LIKE」

我想知道的是,是否有任何C#方法可用於將註冊號與我想拒絕的前綴進行匹配。

與僞代碼

BEGIN 
GET phone num FROM querystring 
FOR EACH banned prefix IN DB 
    CHECK if phone num BEGINS WITH banned prefix 
     IF TRUE, RESPOND TO phone num WITH error message 
     ELSE, REGISTER phone num 
END EACH 
END 
+1

你可以使用正則表達式。 LINQ。子串檢查可以給你更多關於如何獲得代碼中表示的電話號碼和前綴的信息。 – rerun 2012-02-24 07:01:11

+0

你只想做SomeString.Contains(「95973」)嗎? – Tod 2012-02-24 07:01:17

回答

5

您可以使用String.StartWith方法更新。

 string phone = "9182323243"; 
string[] prefix = {"93","94","85"}; 

if (prefix.Any(pre => phone.StartsWith(pre))) 
    //Reject 
else 
    //Accept 
2

最簡單:

 var prefix = "95973"; 
     var number = "95973-123456"; 
     var reject = number.Contains(prefix); 
     var reject2 = number.StartsWith(prefix); 
2

快速和效率不高的方式,描述你在做什麼,是下面的LINQ行:

// load all prefixes 
IEnumerable<string> prefixes = GetPrefixes(); 

// does Any prefix exists such that "number" starts with it? 
bool reject = prefixes.Any(p => number.StartsWith(p)) 

如果你知道你的前綴總是很長5你可以做一個非常有效的精確查詢:

string number = "1234567889"; 

// get the prefix part 
string prefix = number.Substring(0, 5); 

// check if prefixes contains it 
bool reject = prefixes.Contains(prefix); 

在任何情況下,如果你不經常更新前綴,並且它們不是一個巨大的數額(如果它們長5個字符,它們不是一個巨大的數量:))我建議你從內存中加載它們的數據庫,說在HashSet<string>和使用後一種方法,它會快速bleerzing。

0

我已經有寫PB操作系統的經驗。所以,在你的情況最好的辦法是寫規則像這樣: * - 任何數字的數字,可能是0 ? - 一個任意數字

例子:

規則: 「23948?」,數量應該從 「23948」 開始,並應包含

規則後第2位: 「9 *」,所有號碼,開始從數字9開始(在這種情況下,PBX必須等待用戶輸入,例如在每個輸入的數字之後和下一個之前2秒)。

所以,在這種情況下,你必須使用正則表達式