2010-04-16 82 views
8

任何人都可以更正下面的表達也不允許空白字段?電子郵件正則表達式驗證

<asp:RegularExpressionValidator ID="expEmail" runat="server" ControlToValidate="txtEmail" ErrorMessage="valid email address required" ValidationExpression="^([a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]){1,70}$"></asp:RegularExpressionValidator> 
+3

即表達式無效順便說一句,例如加號(+)符號將觸發一個錯誤。 – mbillard 2010-04-16 11:44:46

+1

編寫正確的正則表達式來驗證電子郵件非常困難。以下鏈接應該適用於所有我認爲有效的電子郵件,但正則表達式長度超過6000個字符... http://www.ex-parrot.com/~pdw/Mail-RFC822-Address。 html – 2010-04-16 11:53:38

+1

限制+真的讓我很煩惱。意味着你不能使用谷歌郵件過濾器... – Ian 2010-04-16 12:01:54

回答

11

添加一個必填的字段驗證器 - 我認爲正則表達式驗證器只會在字段中有文本時纔會觸發。

+0

問題中已經使用了所需的字段驗證器。用戶提出的問題是驗證寫在必填字段驗證器中的正則表達式。 – 2010-04-16 11:57:15

+0

@Phani Kumar PV - 呃,不是。但你讓我看起來:) – Paddy 2010-04-16 12:40:50

+0

不會工作,因爲每個錯誤離開標籤的頁面上的空間,所以第二個錯誤漂浮在右邊等等任何解決方案? – LiamB 2010-04-19 08:55:39

18

解決方案之一(不是最好的一個)是爲了實現一些正則表達式:

^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$ 

樣品:[email protected]

但實際上,這是非常難寫,保持良好的電子郵件驗證正則表達式。你不應該信任100%的正則表達式。你可以找到在互聯網上這種困難幾篇文章:

+4

請訪問http://www.regular-expressions.info/email.html – abatishchev 2010-04-16 11:47:36

+1

以瞭解更多信息到目前爲止,對於簡單的電子郵件驗證而言,這是完美的。 – webtrifusion 2012-02-24 22:12:59

+0

這個失敗,有一封有效的電子郵件爲'bob_ @ hotmail.com' – 2014-05-24 20:52:50

0

如果你要正確對待這個字段需要一個那麼最好是去的RequiredFieldValidator 。

<asp:RequiredFieldValidator ID="reqEmail" ControlToValidate="txtEmail" runat="server" ErrorMessage="Email address required"></asp:RequiredFieldValidator> 

感謝,

1

您需要使用額外的驗證 - 任何基於ASP.NET 2.0驗證的BaseValidator(除了RequiredFieldValidator的本身,當然)不檢查asp:RequiredFieldValidator

<asp:RequiredFieldValidator runat="server" ControlToValidate="txtEmail" ErrorMessage="Message!" /> 

指定的字段爲空。

順便說一句,進行自定義UserControl能夠與這樣的驗證檢查,使用

[System.Web.UI.ValidationProperty("PropertyName")] 
1

你不能讓類似

if (txtEmail.Text.Trim().length > 0) then 
     validate 

我認爲既然正則表達式是相當複雜,任何可以在正則表達式之外完成的事情都應該在正則表達式之外完成,這應該使代碼更具可讀性,但這只是我自己。

你的正則表達式是相當複雜的,你應該找到一個更簡單的表達式。 不管怎麼說,你可以做的是這樣的:^(正則表達式){1} $

0

另一種選擇是使用.NET 的CustomValidator,設置其ValidateEmptyText,以及電子郵件地址驗證您可以使用將在ClientValidationFunction驗證程序屬性中指定的JavaScript函數。

0
void Page_Load(Object sender, EventArgs e) 
{ 
    string uNameExpr = "^[a-zA-Z](.{1,9})$"; 
    string phoneExpr = 
     "((\\(\\d{3}\\) ?)|(\\d{3}-))?\\d{3}-\\d{4}"; 

    // Define validation expressions. 
    RegExprVal1.ValidationExpression = uNameExpr; 
    RegExprVal2.ValidationExpression = phoneExpr; 

    ReqFldVal1.Text = "User name is required"; 
    RegExprVal1.Text = "Must be between 2 to 10 characters"; 
    RegExprVal2.Text = "Please provide a valid number: (425) 555-0187"; 
    // ErrorMessages appear in ValidationSummary. 
    RegExprVal1.ErrorMessage = "Incorrect UserName format. Name" + 
     " can be 2 to 10 characters long"; 
    ReqFldVal1.ErrorMessage = "User name required"; 
    RegExprVal2.ErrorMessage = 
     "Please provide a valid number: (000) 000-0000"; 
} 

void OnCmdClick(Object sender, EventArgs e) 
{ 
    if (Page.IsValid) 
    { 
     ActiveForm = Form2; 
    } 
} 
0

這可以通過簡單地使用在System.Text.RegularExpressionsRegex類來完成:

private bool ValidateEmail() 
{ 
    string email = txtemail.Text; 
    Regex regex = new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"); 
    Match match = regex.Match(email); 
    if (match.Success) 
     return true; 
    else 
     return false; 
} 
+1

.info域呢?這突出了爲什麼正則表達式不好。如果你運行一個國家的DNS,那麼它在技術上也是有效的,不需要在最後一部分的點上,你可以是bob @ ly。然後,您還可以在子域名[email protected]上收到電子郵件。所以這個正則表達式不包含它。 – PlexQ 2012-03-25 17:09:47

相關問題