這和區號匹配,它充許(XXX)或者XXX的形式,其中 XXX是三個數字。任何在數字周圍的空白字符是充許的。最後兩個字符,-和?, 是許可但不要求一個橫線。
剩下的部份用於匹配電話的XXX-XXXX部份。\s匹配任意的空白,\d{3}匹配三個數字,\s*-\s*匹配一個圍繞在數字邊上的空白字符。最後,\d{4}精確匹配4個數字。
windows驗證工作方法小有不同,你 沒有預先的驗證分析。相反,你要寫一個事件句柄到 System.Windows.Forms.Control.Validating事件上,或者,如果你創建了你自 己的控件,重載OnValidating方法(參見原則35)。下面是一個標准的方法:
private void textBoxName_Validating( object sender,
System.ComponentModel.CancelEventArgs e )
{
string error = null;
// Perform your test
if ( textBoxName.Text.Length == 0 )
{
// If the test fails, set the error string
// and cancel the validation event.
error = "Please enter a name";
e.Cancel = true;
}
// Update the state of an error provider with
// the correct error text. Set to null for no
// error.
this.errorProviderAll.SetError( textBoxName, error );
}
你有幾個小工作要完成,以確保沒有不合法的輸入愉愉的混過去 了。每一個控件包含一個CausesValidation屬性,這個屬性決定這個控件是否參 與驗證。一般情況,你應該讓所有控件的這一屬性為真,除非是Cancel按鈕。如 果你忘記了,用戶還必須輸出正確的值以後才能取消對話框。第二個小任務是添 加OK句柄來強制驗證所有的控件。驗證只有在用戶訪問和離開控件時觸發。如果 用戶打開了一個窗口,然後馬上點OK,你的所有驗證代碼都不會執行。為了修正 這個,你要添加OK按鈕句柄,來訪問所有的控件,然後強制驗證它們。下面兩個 常規方法顯示了如何正確的完成任務。遞歸方法處理控件以及它所包含的控件: Tab頁面,控件組以及控件面板:
private void buttonOK_Click( object sender,
System.EventArgs e )
{
// Validate everyone:
// Here, this.DialogResult will be set to
// DialogResult.OK
ValidateAllChildren( this );
}
private void ValidateAllChildren( Control parent )
{
// If validation already failed, stop checking.
if( this.DialogResult == DialogResult.None )
return;
// For every control
foreach( Control c in parent.Controls )
{
// Give it focus
c.Focus( );
// Try and validate:
if (!this.Validate( ))
{
// when invalid, don't let the dialog close:
this.DialogResult = DialogResult.None;
return;
}
// Validate children
ValidateAllChildren( c );
}
}
這些代碼可以處理大多數情況。一個特殊的快捷應 用就是DataGrid/DataSet的組合。在設計時指定ErrorProvider的DataSource以 及DataMember屬性:
ErrProvider.DataSource = myDataSet;
ErrProvider.DataMember = "Table1";
或者在運行 時,調用BindToDataAndErrors 方法來同時設置:
ErrProvider.BindToDataAndErrors( myDataSet, "Table1" );
錯誤會在設置DataRow.RowError 屬性以 及調用DataRow.SetColumnError 方法時顯示特殊的錯誤。ErrorProvider 會在 DataGrid的原始的行上的特殊單元格裡顯示紅色的警告圖標。
大概的了 解(whirlwind tour)了一下.net框架裡的控件驗證,這可能對你很有幫助,在很 多應用程序中,你都可以創建出你所須要的高效驗證。用戶的輸入不能完全信任 :用戶可能會出現錯誤,而且有時會有一些惡意的用戶試圖破壞你的應用程序。 通過.Net框架已經提供的服務,你可以減少你自己的代碼編寫工作。驗證所有用 戶的輸入,但要使用已經提供了的高效工具。
返回教程目錄