如何創建一個約束在postgres中使用正則表達式?如何創建一個約束來檢查郵件在postgres中是否有效?
21
A
回答
40
CREATE TABLE emails (
email varchar
CONSTRAINT proper_email CHECK (email ~* '^[A-Za-z0-9._%-][email protected][A-Za-z0-9.-]+[.][A-Za-z]+$')
);
(正則表達式可能是不完整的,你可以搜索爲正則表達式匹配電子郵件所有網站上,並挑選你最喜歡的一個)。
17
我建議使用現有的電子郵件地址解析模塊,而不是組成自己的模式匹配。例如:
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
我會說這是正確的方式,但亞馬遜在RDS中不支持它(perl):-(。也許有一天。 – Jackie 2018-01-20 18:58:50
1
您還可以創建domain,並在定義表格列時將其用作類型。
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
);
這樣,每次在數據庫中使用包含列的電子郵件時,都不需要重新定義正則表達式。
相關問題
- 1. 如何用Postgres檢查約束來檢查用戶是否小於13歲?
- 2. 創建一個約束來檢查列的值
- 3. 如何創建一個.htaccess查詢來檢查文件和cookie是否存在?
- 4. 如何檢查郵件是否有效不是PHP
- 5. 如何在SQL中的兩列之間創建檢查約束?
- 6. 如何創建一個約束佈局
- 7. 一個Oracle檢查約束
- 8. 查找列是否有唯一約束
- 9. 如何檢查CPLEX C++中是否存在約束?
- 10. 如何檢查Sql服務器中是否存在約束?
- 11. 是否可以創建一個電子郵件約束爲'@'的表格檢查是爲了確保電子郵件中有@符號
- 12. 添加一個約束,檢查是否存在proc
- 13. 如何檢查列表中元素之間的約束/是否約束編程?
- 14. Postgres的:約束檢查和空值
- 15. 如何檢查電子郵件帳戶是否有效?
- 16. 如何檢查電子郵件是否有效?
- 17. 我們如何檢查電子郵件地址是否有效?
- 18. 如何在Z3py中創建一個約束來檢查一個列表是否是另一個列表的排列?
- 19. 檢查電子郵件在Google Apps腳本中是否有效
- 20. 檢查電子郵件是否有效? (如果有@和)
- 21. MySQL是否支持檢查約束?
- 22. 是否可以表達檢查約束?
- 23. 檢查一個屬性是否有效
- 24. 創建一個類來檢查sqlserver中的值是否爲空
- 25. NUnit中是否存在一個只有一個約束?
- 26. 如何創建一個IF語句來檢查一個值是否最接近?
- 27. 約束檢查必須是其中一個或另一個
- 28. 是否可以創建一個通用約束方法?
- 29. 在創建表格時檢查約束條件返回錯誤
- 30. 在JavaScript中,是否有一個事件來檢查變量名是否剛創建?
謝謝。這工作完美。 – nunos 2011-04-17 00:14:50
我們如何使用ADD CONSTRAINT和MODIFY varient來完成ALTER命令的工作? – Mahesha999 2013-01-07 11:44:05
你是什麼意思添加和修改?添加你做一些像'ALTER TABLE emails ADD CONSTRAINT proper_email CHECK ....'我相信。類似修改,只需檢查文檔。或者,就像他們在這裏說的 - 你試過了什麼? – 2013-01-07 11:57:47