2013-07-23 65 views
0

我是新來的C#正則表達式的東西。我不確定如何使用正則表達式來驗證客戶端引用號。此客戶參考號碼有3種不同的類型:ID,手機號碼和序列號。如何在C#中使用正則表達式匹配規則#

C#:

string client = "ABC 1234567891233"; 

//do code stuff here: 
if Regex matches 3-4 digits to client, return value = client id 
else if Regex matches 8 digts to client, return value = ref no 
else if Regex matches 13 digits to client, return value = phone no 

我不知道如何使用正則表達式對不同類型的數位。像正則表達式(「{![\ d .....}」)。

+0

您是否搜索過正則表達式c#中的數字計數?此外,如果只有這3種類型只計算字符串中的字符數 - >'yourMagicString.Length'並檢查編號 – wudzik

+2

只需匹配數字,然後通過'value.Length'決定? – Corak

+0

是的,@Corak – user1358072

回答

0

我不確定我是否理解你的問題。但是,如果你想從一個字符串,你可以使用下面的代碼獲得數值的字符數:

Regex regex = new Regex(@"^[0-9]+$"); 
string ValidateString = regex.Replace(ValidateString, ""); 
if(ValidateString.Length > 4 && ValidateString.Length < 10) 
    //this is a customer id 
.... 
+0

感謝它幾乎是我所期待的,但我想正則表達式來計算數字返回值.... – user1358072

+0

這將不會導致問題,如果您的驗證字符串是「a1b2c3d4e5f6g7h8」,因爲它會刪除所有非數字,然後將其識別爲可能不正確的customerid ... – Chris

+0

是的,@Chris,我已驗證這個。在計算數字以識別客戶端類型之前,它將首先驗證字符串。 – user1358072

3

我不明白你爲什麼執意要在這裏使用正則表達式。一個簡單的單線程會做,例如。即使是這樣的擴展方法:

static int NumbersCount(this string str) 
{ 
    return str.ToCharArray().Where(c => Char.IsNumber(c)).Count(); 
} 

在我看來,它更清晰,更易維護。

你也許可以把它與組匹配和東西沿

"(?<client>[0-9]{5,9}?)|(?<serial>[0-9]{10}?)|(?<mobile>[0-9]{13,}?)" 

行一去然後你會檢查是否有「客戶」比賽,「串行」,「移動」和在此基礎上解釋字符串輸入。但是更容易理解?

對於那些稍後閱讀您的代碼,它是否更清楚地表達您的意圖?

如果需求是這樣的,這些數字必須是連續的(如@Corak指出的)......我還是會寫的反覆,像這樣:

/// <summary> 
/// returns lengths of all the numeric sequences encountered in the string 
/// </summary>   
static IEnumerable<int> Lengths(string str) 
{ 
    var count = 0; 
    for (var i = 0; i < str.Length; i++) 
    { 
     if (Char.IsNumber(str[i])) 
     { 
      count++; 
     } 
     if ((!Char.IsNumber(str[i]) || i == str.Length - 1) && count > 0) 
     { 
      yield return count;     
      count = 0;      
     } 
    } 
} 

然後你可以簡單地:

bool IsClientID(string str) 
{ 
    var lenghts = Lengths(str); 
    return lenghts.Count() == 1 && lenghts.Single() == 5;    
} 

它更冗長嗎?是的,但有可能人們仍然會喜歡你,而不是每當驗證規則發生變化時讓他們擺弄正則表達式,或者需要一些調試:)這包括你未來的自我。

+1

如果您事先過濾了諸如「a1b2c3d4e5f6g7h8」這樣的案例,是的,這看起來更乾淨。 – Corak

+0

我更新了我的答案 –