2014-04-29 31 views
-1

如何驗證註冊表單?目前,我正在開發一個項目,它有很多文本框,只有很少的單選按鈕和複選框,我需要驗證每個文本框,其中幾個文本框是必需的,而少數文本框可以是空的,但如果用戶在這些空白文本框上輸入文本,則應驗證這些輸入。目前,我正在使用嵌套if語句的正則表達式,但它非常耗時,並且我對這麼多if else語句感到困惑。如何驗證Windows表單

if (textBox1.Text != string.Empty) { 
    Regex emp1=new Regex("^[a-z-A-Z]+$"); 
    if(emp1.IsMatch(textBox1.Text)) { 
     if (textBox2.Text != string.Empty) { 
      Regex emp2 = new Regex("^[0-9]+$"); 
      if(emp2.IsMatch(textBox2.Text)) { 
       int a = int.Parse(textBox2.Text); 
      else { 
       MessageBox.Show("characters not allowed"); 
       textBox2.Focus(); 
      } 
     } else { 
      MessageBox.Show("pls enter age"); 
     }      
    } else { 
     MessageBox.Show("no. are not allowed "); 
    } 
} else { 
    MessageBox.Show("pls enter name"); 
    textBox1.Focus(); 
} 
+1

難看的代碼示例請使用'SO'內的格式化沒有人想要滾動這個混亂 – MethodMan

+0

神聖的嵌套。 –

+4

Yo dawg,我聽說你喜歡'if'語句...... – ElGavilan

回答

4

您可以在每次檢查後使用返回。

if (string.IsNullOrEmpty(textBox1.Text)) 
{ 
    MessageBox.Show("pls enter name"); 
    textBox1.Focus(); 
    return; 
} 

Regex emp1=new Regex("^[a-z-A-Z]+$"); 
if (!emp1.IsMatch(textBox1.Text)) 
{ 
    MessageBox.Show("no. are not allowed "); 
    return; 
} 

如果你不喜歡的收益蔓延到你的代碼,你可以使用else if。對於這種檢查,我個人喜歡在郵件後面使用退貨。

+0

請不要,不要鼓勵多個方法的退出點。它使得所述方法更難以調試/維護。 –

+1

取決於檢查失敗後想要執行多少個特定操作。在這種情況下if方法的問題可能是,你不能總是將一個表達式中的所有驗證步驟都在if語句中使用。在他表明他必須首先構造正則表達式的情況下。它可以被重寫成一個表達式,但那並不總是可能的。 – BlueM

+0

@CraigW。不,如果所有退出點位於方法的頂部(通常是驗證)本身,則沒有任何錯誤。保持代碼可讀性和易於維護。 –

3

你可以else if語句,像這樣做:

string message = null; 
TextBox focusMe = null; 

if (failure1) 
{ 
    message = "message1"; 
} 
else if (failure2) 
{ 
    message = "message2"; 
} 
else if (failure3) 
{ 
    message = "message3"; 
} 

if (!string.IsNullOrEmpty(message)) 
{ 
    MessageBox.Show(message); 

    if (focusMe != null) focusMe.Focus(); 
} 

我是一個return的粉絲,所以這是我喜歡的風格。此外,您可以輕鬆修改此項以檢查多個錯誤情況,方法是將else if替換爲if,並將錯誤添加到列表中。

+0

+1無法在整個代碼中散佈回報。 –

+0

取決於您是否始終可以將您的失敗狀況寫入一個表達式。你不想在前面計算n個失效變量。 – BlueM

+0

@BlueM你總是可以在失敗條件下使用'&&',嵌套另一層'if',或者將一些複雜因素分解爲單獨的函數。它歸結爲最可讀性。 –