2012-10-30 48 views
0

因此,看起來我用正則表達式做的一切並沒有達到我期望的效果。這個聲明,我希望拋棄任何字母,並且至少需要3位數字,但它不需要3位數字。它確實不允許使用字母,但任何數字都是好的。General Regex混淆。試圖驗證電話號碼

myReg = new Regex(@"(^[a-z])([0-9]{3,3})*"); 

我期望^ [a-z]拋出字母,[0-9] {3,3}需要3位數字。

不妨添加整個代碼塊,沒想到。

userData = phone.Text; 

myReg = new Regex(@"(^[a-z])([0-9]{3})+"); 

     foreach (var validName in myReg.Matches(userData)) 
     { 
      if (myReg.IsMatch(userData)) 
      { 
       phone.Clear(); 
       badData.Visible = true; 
       phone.Focus(); 
      } 
     } 
+0

感謝您指出,這是一個複製/粘貼錯誤。修正了這個錯字! – Kefkamaydie

+1

您有相互矛盾的要求:最少3個,最多任意數字。這是什麼? –

回答

1

匹配

One character that isn't a letter from a to f, stored in a backreference, 
followed by zero or more instances of: 
    3 characters that are digits from 0-9 
    stored in another backreference. 

我想你需要:^[0-9]{3}+$

這包含字符串匹配:

One or more instances of: 
    3 characters that are digits from 0-9 

如果你不是隻需要一個由一串超過3個字符和全部數字,您可以使用:^[0-9]+$

1

試試這個要求正好三個數字:

var regex = new Regex(@"^\d{3}$"); 
+0

添加錨點,然後它的工作;) –

+0

接受一切,但3位數。它是我的其他代碼有問題嗎? – Kefkamaydie

+0

檢查你的外殼。 '\ d'表示僅匹配數字。 '\ D'表示匹配除數字以外的所有內容。 –

0

我覺得*被指定,你可以把任何字符的數量。嘗試刪除「*」並查看它是否有效。

+0

刪除'*'會生成一個有效的az字符,所以它會發出兩個以上的數字,所以23是有效的,但是123不是 – Kefkamaydie

0

試試這個:

"(\+?\d{1,5}(?:[\s_-]{0,1}\d{2,4}[\s_-])+)" 
+2

這對於OP所要求的內容來說是矯枉過正的,沒有? –

0
^(?=.{3,10})([2-9]\d{2,9}) 
  • ^(?=.{3,10})從一開始就必須有至少3個項目,但不超過10
  • [2-9]沒有美國的數量可以用1開始,所以要確保2-9的範圍是允許第一個數字的範圍。
  • \d{2,9}國家,2更多到9數字必須在比賽中。