2011-04-27 48 views
0

編輯02/05/2011對多個文本框進行正則表達式驗證? C#asp.net

好了,我需要讓我的驗證客戶方,所以我需要什麼要求低於在C#中實際上是jQuery中。我也將驗證服務器端,所以我希望有更多的輸入。

原始的問題

好了,今天一個真正的noob問題IM之旅!

我以前的問題是針對特定的正則表達式。現在我有它,它的工作..如何可以推出多個文本框?我不想使用多個正則表達式驗證工具,因爲它們會混亂我的設計空間,我不認爲這是一個非常優雅的解決方案(這是一個學位項目)

有沒有我可以寫的方法?沿着

if (validator(txtsomething.text.tostring()) = true) 
{ 
    Dothis 
} 

else 
{ 
    dothis 
} 

的的

public validator(string) 
{ 
    doessomething.tostring 
    return true/false 
} 

和接入線路,如果我的問題是垃圾:) Thanks``

+2

如果您要這樣做,您會意識到需要調用服務器。 RegularExpressionValidator控件的好處是它是一個客戶端驗證方法,這意味着要驗證,它不會調用服務器,所以放置多個REV就是我的建議。同時,我還建議進行服務器端驗證,因爲有辦法繞過客戶端驗證。 – seekerOfKnowledge 2011-04-27 18:06:41

+0

+1如果您不使用'RegularExpressionValidator',那麼下面的代碼示例都需要在JavaScript中爲客戶端完成或在服務器上運行。 – jp2code 2011-04-27 18:11:15

+0

我已經更新了我的答案,除了服務器端驗證之外,還包含了jquery。 – annelie 2011-05-04 18:47:46

回答

3

如何創建一個自定義的控制?我編輯了我的答案,包括jQuery以及服務器端驗證。我不知道你使用的是什麼正則表達式,所以我只用了一個簡單的字母測試。

的JavaScript(包括jQuery的文件):

<script language="javascript" type="text/javascript"> 
    function validateText(source, args) { 

     var allTextFieldsValid = true; 

     $(".noNumbers").each(function() { 
      if (!/^[a-zA-Z]*$/.test(this.value)) { 
       allTextFieldsValid = false; 
      } 
     }); 

     args.IsValid = allTextFieldsValid; 
    } 

</script> 

.aspx頁面中:

// set a specific css class on the textboxes you want to check so that jQuery can 
// find them easily 
<asp:TextBox ID="TextBox1" runat="server" CssClass="noNumbers"></asp:TextBox> 
<asp:TextBox ID="TextBox2" runat="server" CssClass="noNumbers"></asp:TextBox> 
<asp:Button ID="SubmitButton" runat="server" Text="submit" OnClick="Submit_Click" /> 

<asp:CustomValidator ID="MyValidator" runat="server" 
     OnServerValidate="Text_Validate" Text="Oops, sorry, no numbers!" 
     ClientValidationFunction="validateText"></asp:CustomValidator> 

後面的代碼:

protected void Submit_Click(object sender, EventArgs e) 
    { 
     if (Page.IsValid) 
     { 
      // do stuff 
     } 
     else 
     { 
      // do other stuff 
     } 
    } 

    protected void Text_Validate(object source, ServerValidateEventArgs args) 
    { 
     args.IsValid = true; 

    // I've done each textbox by id, but depending on how many you might want to loop through the controls instead 

     if (!IsTextValid(TextBox1.Text)) 
     { 
      args.IsValid = false; 
     } 

     if (!IsTextValid(TextBox2.Text)) 
     { 
      args.IsValid = false; 
     } 
    } 

    private bool IsTextValid(string myTextValue) 
    { 
     string myRegexString = @"^[a-zA-Z]*$"; 

     return Regex.IsMatch(myTextValue, myRegexString); 
    } 

希望這有助於!

+0

謝謝,生病嘗試明天,讓你知道我如何得到:) – 2011-05-04 21:14:06

+0

你知道我有多久尋找一種方法來做到這一點!走的方式:) – 2011-05-05 14:01:47

+0

哈哈,很高興我能幫上忙! :) – annelie 2011-05-05 14:10:38

0

我不知道你的確切意圖,請耐心等待,但你似乎基本上是正確的:

每個假設你正在處理「TextBoxChanged」事件,你只需要做這樣的事情:

if(!string.IsNullOrEmpty(MyTextBox.Text)) 
{ 
    if(ValidateInput(MyTextBox.Text) 
    { 
    [do stuff here] 
    } 
    else 
    { 
    [do other stuff here] 
    } 
} 

,然後你ValidateInput(string stringToCheck)方法看起來是這樣的:

private bool ValidateInput(string stringToCheck) 
{ 
    string patern = [your regex patern] 
    //Check to make sure that I've got this method call right- you want to make sure 
    //that there are matches, basically 
    if(Regex.Matches(patern, stringToCheck).Count >= 1) return true; 
    return false; 
} 

這會接着說:「如果沒有我的regex-任何比賽做一兩件事,如果沒有,做其他事「

0

那麼,你可以找到你的表格/頁面中的所有文本框控件並應用驗證器。

假設您正在使用的WinForms應用程序,試試這個:

// .NET Framework 3.5的

foreach (TextBox textBox in MyForm.Controls.OfType<TextBox>()) 
{ 
    if (validator(textBox.Text) == true) 
    { 
     // Do this 
    } 
    else 
    { 
     // Do that 
    } 
} 

讓我知道,如果它幫助。

PS:您可能需要爲您的所有TextBox控件的做一些遞歸工作控件容器=/

0

編寫事件處理程序:

onload事件處理:

foreach (Control ctrl in Controls) { 
    TextBox tbox = ctrl as TextBox; 
    if (tbox != null) { 
     tbox.TextChanged += new EventHandler(TextBox_TextChanged); 
    } 
    } 

void TextBox_TextChanged(object sender, EventArgs e) { 
    TextBox tbox = sender as TextBox; 
    if (tbox != null) { 
    if (validator(tbox.Text)) { 
     // DoThis 
    } else { 
     // DoThat 
    } 
    } 
}