Regex chuỗi trống hoặc email


127

Tôi đã tìm thấy rất nhiều xác thực email Regex trong SO nhưng tôi không tìm thấy bất kỳ thứ gì sẽ chấp nhận một chuỗi trống. Điều này chỉ có thể thông qua Regex? Chỉ chấp nhận chuỗi trống hoặc email? Tôi chỉ muốn có cái này trên Regex.

Câu trả lời:


311

Mẫu regex này sẽ khớp với một chuỗi rỗng:

^$

Và điều này sẽ khớp (thô sơ) một email hoặc một chuỗi trống:

(^$|^.*@.*\..*$)

1
Một cái gì đó để xem xét, làm ^ (|. * ​​@. * \ .. *) $ sẽ có tác dụng tương tự như nó nói trống hoặc điều này chỉ với việc sử dụng ^ và $ một lần, để dọn dẹp nó một chút.
Runevault

1
Điều này khá cũ, nhưng tôi chỉ vấp phải điều này và gặp rắc rối với câu trả lời. Có những trường hợp phần đầu của chuỗi bị ẩn nhưng vẫn khớp với ^, trong đó bạn đang tìm email một cách hiệu quả hoặc không có gì ở giữa chuỗi. Đối với điều này (email_regex)?là phù hợp hơn.
jclancy

Hãy chắc chắn đọc lên cách xác thực email cực kỳ phức tạp, trước khi thử sử dụng RegEx để thực hiện. stackoverflow.com/questions/201323/ cường
bryan kennedy

Điều này sẽ phù hợp với email test.test@test sau đây. Cái này tốt hơn tôi nghĩ ^ $ | ^ [^ \ s @] + @ [^ \ s @] + \. [^ \ S @] + $ vì nó sẽ chấp nhận các email như test@test.se
dont_trust_me

Trong một ứng dụng Java cụ thể, ứng dụng ^$này không hoạt động, nhưng ^(?!.)thực hiện: [ ^bắt đầu chuỗi, nhìn (?!)tiêu cực, .bất kỳ ký tự nào - không bao gồm nguồn cấp dữ liệu]
LightCC

8

phù hợp với chuỗi trống hoặc email

(^$|^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.(?:[a-zA-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)$)

phù hợp với chuỗi trống hoặc email nhưng cũng phù hợp với bất kỳ khoảng trắng nào

(^\s*$|^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.(?:[a-zA-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)$)

xem thêm về chính email phù hợp với regex:

http://www.THER-expressions.info/email.html


2

Các câu trả lời ở trên hoạt động ($ cho sản phẩm nào), nhưng tôi chỉ thử cái này và nó cũng hoạt động để chỉ để trống như vậy:

/\A(INTENSE_EMAIL_REGEX|)\z/i

Điều tương tự theo thứ tự ngược lại

/\A(|INTENSE_EMAIL_REGEX)\z/i

0

Đừng kết hợp email với regex. Nó cực kỳ xấu và dài và phức tạp và trình phân tích cú pháp regex của bạn có thể không thể xử lý được. Cố gắng tìm một thói quen thư viện để phù hợp với họ. Nếu bạn chỉ muốn giải quyết vấn đề thực tế là khớp địa chỉ email (nghĩa là nếu bạn muốn mã sai xảy ra với (thường) hoạt động), hãy sử dụng liên kết chính quy-expressions.info mà người khác đã gửi.

Đối với chuỗi trống, ^$được đề cập bởi nhiều người và sẽ hoạt động tốt.


13
Regex xấu xí trong thực tế có thể được xử lý bởi các trình phân tích cú pháp regex. Không sử dụng regex chỉ vì nó xấu là ngớ ngẩn.
Peter

Đây không phải là xây dựng. RegEx đã được thử và kiểm tra (và khác xa với sự xấu xí - bạn có thể nói nó khá thanh lịch khi hoạt động không?). Để mơ hồ đề xuất một thư viện mà không có bất kỳ hướng dẫn về một giải pháp có thể đánh bại mục đích đáp ứng cả. Mọi người cần đánh dấu trang: code.tutsplus.com/tutorials/ từ
pimbrouwers

Regexes nổi tiếng là khó đọc, duy trì và gỡ lỗi, khiến chúng trở thành một ứng cử viên chính để thay thế bằng một cuộc gọi đến thư viện.
vô tư

2
Đối với hồ sơ: Tôi sẵn sàng giới thiệu một thư viện cụ thể nếu tôi biết OP đang sử dụng ngôn ngữ nào. Vì đây là một câu hỏi bất khả tri về ngôn ngữ, các lựa chọn của tôi khá hạn chế.
Kevin

2
Regex không được coi là đẹp. Theo logic đó, không ai nên sử dụng regex. Nếu bạn quá kiên định về một thư viện thay thế nó, thì bạn nghĩ thư viện đó sẽ làm gì? Nó sẽ có mã rất dài, phức tạp hoặc sẽ sử dụng regex ... Đến lúc đó, bạn cũng có thể thực hiện "thư viện" của riêng mình. Và ngày nay, nếu ai đó không biết cách sử dụng regex, có lẽ họ không nên được giao nhiệm vụ xác thực địa chỉ email bằng mọi cách ...
Andrew

0

điều này sẽ giải quyết, nó sẽ chấp nhận chuỗi rỗng hoặc chính xác một id email

"^$|^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"

2
bạn có thể mô tả thêm một chút
Vinay Prajapati

0

Tôi thích /^\s+$|^$/gikết hợp không gian trống và trống.

console.log("  ".match(/^\s+$|^$/gi));
console.log("".match(/^\s+$|^$/gi));


3
Nếu bạn sử dụng ^ \ s * $, bạn không cần hoặc trường hợp. Ngoài ra, không cần sửa đổi g hoặc i vì điều này khớp với toàn bộ dòng và không liên quan đến bất kỳ ký tự nào có vỏ.
Cadoo

0

Nếu bạn đang sử dụng nó trong rails - xác thực Activerecord bạn có thể đặt allow_blank: true

Như:

validates :email, allow_blank: true, format: { with: EMAIL_REGEX }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.