在 SQLite 中检查电子邮件格式是否正确

时间:2021-02-16 15:09:06

标签: sqlite

电子邮件地址的格式应该是 X@Y.Z 和 X,Y 可能是拉丁字符或数字,而 Z 可能只包含拉丁字母。 X、Y 和 Z 应该是非空字符串。

我目前正在使用 CHECK (Email LIKE '%_@__%.__%'),但它仍然允许使用 Z 中的数字和特殊字符。

请注意,这是一项出于学习目的而构建的任务,并非最适合现实世界。

谢谢你帮助我。

1 个答案:

答案 0 :(得分:0)

对于您描述的要求,您可以使用运算符 GLOB 来构造 CHECK 约束:

CREATE TABLE tablename(
  email TEXT,
  CHECK (
    email LIKE '%_@_%._%' AND
    LENGTH(email) - LENGTH(REPLACE(email, '@', '')) = 1 AND
    SUBSTR(LOWER(email), 1, INSTR(email, '.') - 1) NOT GLOB '*[^@0-9a-z]*' AND
    SUBSTR(LOWER(email), INSTR(email, '.') + 1) NOT GLOB '*[^a-z]*'
  )
)

查看简化的 demo