2013-06-04 50 views

Trả lời

4

Không cần regex:

bool allOk = str.Split(';').All(email => email.Count(c => c == '@') == 1); 

Mặc dù điều này có thể dẫn đến kết quả erronous ([email protected]_foo.com không phải là email hợp lệ!)

+0

sẽ hoạt động ngay cả khi bạn có @; @; @; ... –

+0

@FelicePollano Đúng, nhưng "@ một lần trong mỗi email" là đặc điểm kỹ thuật do OP cung cấp. Để kiểm tra đầy đủ các email, anh ta có thể sử dụng phân tách + regex hoặc regex chung. – SimpleVar

+1

Có, nhưng OP đã hỏi _how để kiểm tra xem tất cả các từ có chứa [@.] Một lần trong từ_ không và tôi đã trả lời câu hỏi. –

1

Tôi không nghĩ RegEx là cần thiết nhưng đây là mô hình tôi sẽ sử dụng; \b[a-zA-Z0-9][email protected][a-zA-Z0-9]+\b

\b là ranh giới từ, sau đó tôi có bộ chữ cái chữ và số. + có nghĩa là một hoặc nhiều lần xuất hiện của char trước đó. Vì vậy, nó nói từ một ranh giới từ, nó có thể có 0 hoặc nhiều hơn của bất kỳ char theo sau bởi một @, sau đó một lần nữa, một hoặc nhiều char bất kỳ chữ số theo sau là một ranh giới từ.

+0

Tôi muốn sử dụng expresion này trong javascript. "\ b. * @. * \ b" không chính xác, vì nó không xác nhận "[email protected] test". – Reno

+0

Sẽ không. * Cũng khớp với một ranh giới như không gian hoặc; –

+1

@Reno nó khớp với "[email protected]" tại sao nó phải khớp với một số từ ngẫu nhiên sau khi kết thúc địa chỉ email? Nếu đó là những gì bạn muốn làm cho biểu tượng ranh giới từ sau dấu tách của bạn thay vào đó xuất hiện để được một dấu chấm phẩy. Và có, bạn có thể muốn thay thế '. *' Bằng một số ký tự đặt theo sau là '*' như '[a-zA-Z0-9] *' – evanmcdonnal

-2

Nếu bạn cần một validator email, hãy thử regexp này:

[a-zA-Z0-9 -] {1,} @ ([a-zA-Z.]) [A? -zA-Z] {1,} [a-zA-Z] {1,4}

+0

Điều đó có vẻ không đúng. Nó khớp với 'a @ .b.c' – SimpleVar

+0

bạn nói đúng. cố định: [a-zA-Z0-9 -] {1,} @ ([a-zA-Z])? [a-zA-Z] {1,} \. [a-zA-Z] {1, 4} – jsfviky

+0

Ký tự '-' được cho phép trong email? Tôi biết rằng '_' là, và thậm chí có thể' .' ... Bạn có thể rút ngắn '[a-zA-Z0-9_]' bằng '\\ w', btw. – SimpleVar

1

Bạn có thể thử với:.

[_a-zA-Z0-9-][email protected][_.a-zA-Z0-9-^;]+;? 

đó là một số char tiếp theo @ cộng với một số char không phải ';' theo sau là một tùy chọn; look at the demo here.

+0

Điều này sẽ khớp với '! @ #', Tương ứng với '123' với ca làm việc, nhân tiện, và không phải là một email. – SimpleVar

+0

@YoryeNathan chính xác, chúng tôi có thể tinh chỉnh +. –

+0

Bây giờ nó không khớp với 'a_b @ xyz' - Không chắc chắn OP có muốn hỗ trợ email với hai dấu chấm (ví dụ [email protected]) hay không, nhưng gạch dưới chắc chắn được cho phép. – SimpleVar

0

biến thể này đơn giản về câu trả lời @jsfviky 's cho phép trong một thời gian và có dấu gạch nối vào địa chỉ e-mail ở cả hai cấp tên miền và phần địa phương và cũng là một dấu cộng cho dùng một lần địa chỉ phong cách e-mail:

[a-zA-Z0-9-\.\+]{1,}@(?:[a-zA-Z])[a-zA-Z\.-]{1,}.[a-zA-Z]{1,4} 

Thực tế đây là tất cả những gì bạn cần nhưng địa chỉ e-mail hợp lệ có thể chứa bất kỳ !#$%&'*+-/=?^_ {|} ~ `để bạn có thể muốn thay đổi tùy thuộc vào trường hợp sử dụng.

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