2011-04-16 33 views

Trả lời

40
CREATE TABLE emails (
    email varchar 
    CONSTRAINT proper_email CHECK (email ~* '^[A-Za-z0-9._%-][email protected][A-Za-z0-9.-]+[.][A-Za-z]+$') 
); 

(regex có thể chưa hoàn tất, bạn có thể tìm kiếm regexp để đối sánh email trên toàn bộ web và chọn một email bạn thích nhất).

+0

Cảm ơn. Điều đó làm việc hoàn hảo. – nunos

+0

Làm cách nào chúng ta có thể thực hiện công việc này bằng lệnh ALTER với cả hai phương thức ADD CONSTRAINT và MODIFY? – Mahesha999

+0

Bạn có ý nghĩa gì khi thêm và sửa đổi? Với việc thêm bạn làm một cái gì đó như 'ALTER TABLE email ADD CONSTRAINT proper_email CHECK ....' Tôi tin. Một cái gì đó tương tự với sửa đổi, chỉ cần kiểm tra các tài liệu. Hoặc, như họ nói ở đây - bạn đã thử cái gì? –

17

Tôi khuyên bạn nên sử dụng mô-đun phân tích cú pháp địa chỉ email hiện tại thay vì tạo mẫu phù hợp với riêng bạn. Ví dụ:

CREATE OR REPLACE FUNCTION check_email(email text) RETURNS bool 
LANGUAGE plperlu 
AS $$ 
use Email::Address; 

my @addresses = Email::Address->parse($_[0]); 
return scalar(@addresses) > 0 ? 1 : 0; 
$$; 

CREATE TABLE emails (
    email varchar 
    CONSTRAINT proper_email CHECK (check_email(email)) 
); 
+0

Tôi có thể nói đây là cách đúng nhưng Amazon không hỗ trợ nó (perl) trong RDS :-(. Có thể một ngày nào đó. – Jackie

1

Bạn cũng có thể tạo domain và sử dụng nó làm loại khi xác định cột bảng, ví dụ:

CREATE DOMAIN email AS TEXT CHECK (VALUE ~* '^[A-Za-z0-9._%-][email protected][A-Za-z0-9.-]+[.][A-Za-z]+$'); 

CREATE TABLE emails (
    email email 
); 

Bằng cách này bạn sẽ không cần phải xác định lại regex mỗi lần email chứa cột được sử dụng trong cơ sở dữ liệu.

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