2010-04-16 48 views
8

Có ai có thể sửa biểu thức bên dưới để không cho phép trường trống không?Email Xác nhận biểu thức chính quy

<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

Cái vẻ không hợp lệ btw, ví dụ cộng (+) dấu hiệu sẽ kích hoạt một lỗi. – mbillard

+1

Rất khó để viết một regexp chính xác để xác thực email. Các liên kết sau đây được coi là một trong đó hoạt động cho tất cả các email hợp lệ tôi nghĩ, nhưng regexp là hơn 6000 ký tự dài ... http://www.ex-parrot.com/~pdw/Mail-RFC822-Address. html –

+1

Hạn chế + thực sự làm phiền tôi. Có nghĩa là bạn không thể sử dụng bộ lọc googlemail ... – Ian

Trả lời

11

Thêm trình xác thực trường bắt buộc - Tôi nghĩ trình xác thực regex sẽ chỉ kích hoạt nếu có văn bản trong trường cần xem.

+0

Trình xác thực trường bắt buộc đã được sử dụng trong câu hỏi. Câu hỏi mà người dùng yêu cầu là xác thực biểu thức chính quy được viết trong trình xác thực trường bắt buộc. –

+0

@Phani Kumar PV - Um, không phải vậy. Nhưng bạn đã làm cho tôi nhìn :) – Paddy

+0

Sẽ không làm việc như mỗi lỗi để lại không gian trên trang cho nhãn để lỗi thứ hai là trôi nổi trên bên phải vv Bất kỳ giải pháp này? – LiamB

18

Một trong những giải pháp (không phải là tốt nhất) là để thực hiện một số biểu thức chính quy:

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

mẫu: [email protected]

Nhưng trên thực tế, nó rất khó để viết và duy trì một regexp xác thực email tốt. Bạn không nên tin tưởng 100% regex của bạn. Bạn có thể tìm thấy một số điều về điều đó khó khăn trên Internet:

+4

Xem thêm tại http://www.regular-expressions.info/email.html – abatishchev

+1

Cho đến nay, hoạt động hoàn hảo để xác thực email đơn giản. – webtrifusion

+0

Điều này không thành công với một email hợp lệ của 'bob_ @ hotmail.com' –

0

Nếu bạn muốn đối xử với lĩnh vực này là một yêu cầu thì tốt hơn là đi cho RequiredFieldValidator .

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

Cảm ơn,

1

Bạn cần phải sử dụng thêm một validator - asp:RequiredFieldValidator

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

Bất kỳ của ASP.NET 2.0 xác nhận dựa trên BaseValidator (trừ RequiredFieldValidator bản thân dĩ nhiên) không kiểm tra trường được chỉ định để trống.

Btw, để làm cho tùy chỉnh UserControl việc có thể được kiểm tra với trình xác nhận như vậy, sử dụng

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

bạn không thể làm một cái gì đó giống như

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

Tôi nghĩ rằng kể từ khi biểu thức thông thường là khá phức tạp , bất cứ điều gì có thể được thực hiện bên ngoài biểu thức chính quy nên được thực hiện bên ngoài biểu thức chính quy, điều này sẽ làm cho mã dễ đọc hơn, nhưng đó chỉ là tôi.

Cụm từ thông dụng của bạn khá phức tạp, here bạn nên tìm một biểu tượng đơn giản hơn. Anyways, những gì bạn có thể làm là một cái gì đó như thế này:^(regex) {1} $

0

lựa chọn khác là sử dụng .net CustomValidator, thiết ValidateEmptyText nó để Đúng, và để xác nhận địa chỉ email bạn có thể sử dụng hàm JavaScript sẽ được chỉ định trong ClientValidationFunction thuộc tính của trình xác thực.

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

Điều này có thể được thực hiện với chỉ đơn giản là sử dụng Regex lớp trong 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

còn miền .info thì sao? Điều này làm nổi bật lý do tại sao regexes là xấu. Nó cũng có giá trị về mặt kỹ thuật không cần ở dấu chấm ở phần cuối cùng, nếu bạn chạy DNS của một quốc gia, bạn có thể là bob @ ly. Sau đó, bạn cũng có thể có email tại các tên miền phụ, [email protected] Vì vậy, regex này không bao gồm nó. – PlexQ

Các vấn đề liên quan