1

我有一個數據庫表,其中包含Email字段。不知何故,一個無效的電子郵件地址已通過應用程序驗證,並進入數據庫字段。SQL電子郵件驗證約束

如何向此字段添加約束條件,以便無法存儲無效的電子郵件地址?

+0

貼我覺得這是一個重複的問題,並通過http://stackoverflow.com/questions/229824/tsql-回答email-validation-without-regex鏈接 –

+0

如何將它添加到約束中? – Curt

回答

0

根據this article,SQL Server支持CHECK約束中的正則表達式。 將它與一個可靠的電子郵件驗證正則表達式結合起來,你應該很好。

您還可以在CHECK約束中使用LIKE

你也可以在SQL Server enable CLR Integrationcreate a CLR function如果您使用的是SQL Server 2005或更高,並呼籲它在CHECK約束。 CLR函數將處理正則表達式驗證。

1

它取決於什麼有效對你意味着什麼。對我而言,電子郵件地址可能是有效的(即根據RFC 5322正確形成),但我可能無法發送到它。無論您需要測試a)地址的格式還是b)您發送電子郵件的能力取決於應用程序。

如果您只是想確保用戶的電子郵件地址格式正確,那麼您就會被正則表達式限制在驗證範圍之內。祝你好運。請參閱RFC 3696,「3.電子郵件地址限制」以瞭解詳細信息。

關於我的頭頂,以下是我過去用來幫助我的客戶做出有關電子郵件驗證的決定的一些指導性意見。

  • 用戶想要從我們這裏收到電子郵件;假設用戶被激勵到 正確的錯誤。 (在 大致正確的地方接受帶有「@」符號和「。」的任何東西。)
  • 存在隱私問題;發送電子郵件到用戶的地址,並且 要求用戶點擊一個鏈接進行確認。 (您仍然可以接受 帶「@」符號和大致正確位置的「。」的任何內容 需要數據庫和Web應用程序開發之間的合作。)
  • 涉及本地策略。將電子郵件地址限制爲此真正有效的電子郵件地址的任意子集的 。 (我已經看到了這個時候 一個公司收購了另一家公司,並要求每個人都成爲 分配一個新的電子郵件地址,這些電子郵件帳戶實際上是創建 之前。)

取決於你去,你走哪條路將需要更寬鬆或更緊密的正則表達。根據我的經驗,大部分時間大部分人都會採用較寬鬆的驗證。