2010-04-16 17 views
8

Qualcuno può correggere l'espressione di seguito per non consentire il campo vuoto?Email Convalida espressione normale

<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

Questa espressione non è valida btw, per esempio più (+) i segni provocherà un errore. – mbillard

+1

È molto difficile scrivere un'espressione regolare corretta per convalidare le e-mail. Il seguente link dovrebbe essere uno che funziona per tutte le e-mail valide, penso, ma il regexp è ben più di 6000 caratteri lungo ... http://www.ex-parrot.com/~pdw/Mail-RFC822-Address. html –

+1

Restringere + mi infastidisce davvero. Significa che non puoi usare i filtri di googlemail ... – Ian

risposta

11

aggiungere un validatore campo obbligatorio, come pure - penso che il validatore regex viene considerata solo se non v'è il testo nel campo da guardare.

+0

Il validatore di campo richiesto è già utilizzato nella domanda. La domanda posta dall'utente è di convalidare l'espressione regolare scritta nel campo richiesto validatore. –

+0

@Phani Kumar PV - Um, no, non lo è. Ma mi hai fatto sembrare :) – Paddy

+0

Non funzionerà perché ogni errore lascia lo spazio sulla pagina per l'etichetta, quindi il secondo errore è flottato sulla destra ecc. Qualunque soluzione a questo? – LiamB

18

Una delle soluzioni (non un migliore) è di attuare alcune delle espressioni regolari:

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

Esempio: [email protected]

Ma in realtà, è molto difficile da scrivere e mantenere una buona espressione di conferma dell'e-mail. Non dovresti fidarti del 100% della tua espressione regolare. È possibile trovare diversi articoli su questa difficoltà su Internet:

+4

Ulteriori informazioni su http://www.regular-expressions.info/email.html – abatishchev

+1

Finora, funziona perfettamente per una semplice convalida e-mail. – webtrifusion

+0

Questo fallisce con una mail valida di 'bob_ @ hotmail.com' –

0

Se si desidera trattare questo campo come quello richiesto, allora è meglio andare per RequiredFieldValidator .

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

Grazie,

1

È necessario utilizzare un ulteriore validatore - asp:RequiredFieldValidator

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

Qualsiasi di ASP.NET 2.0 validatori basate su BaseValidator (tranne RequiredFieldValidator per sé, naturalmente) non controlli il campo specificato deve essere vuoto.

Btw, per rendere personalizzato UserControl essere in grado di essere controllato con tali validatori, utilizzare

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

non si può fare qualcosa di simile a

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

Penso che da quando le espressioni regolari sono piuttosto complesse , tutto ciò che può essere fatto al di fuori dell'espressione regolare dovrebbe essere fatto al di fuori dell'espressione regolare, questo dovrebbe rendere il codice più leggibile, ma quello sono solo io.

L'espressione regolare è piuttosto complessa, here si dovrebbe trovare uno più semplice. In ogni modo, che cosa si può fare è qualcosa di simile:^(regex) {1} $

0

Un'altra scelta è quella di utilizzare .net CustomValidator, impostare la sua ValidateEmptyText a Vero, e per la convalida indirizzo e-mail è possibile utilizzare una funzione JavaScript che verrà specificata nella proprietà ClientValidationFunction del validatore.

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

Questo può essere fatto con semplicemente utilizzando Regex classe System.Text.RegularExpressions:

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

e di domini .info? Ciò evidenzia perché le regex sono cattive. È anche tecnicamente valido non necessario al punto nell'ultima parte, se si esegue il DNS di un paese, si può essere bob @ ly. Quindi puoi anche avere e-mail in sottodomini, [email protected] Quindi questa regex non lo copre. – PlexQ

Problemi correlati