Проверьте правильность формата электронной почты в SQLite

#sqlite

#sqlite

Вопрос:

Адрес электронной почты должен быть в формате X@Y.Z и X, Y могут быть латинскими символами или цифрами, в то время как Z может содержать только латинские буквы. Предполагается, что X, Y и Z являются непустыми строками.

В настоящее время я использую CHECK (Email LIKE '%_@__%.__%') , но он по-прежнему допускает числа в Z и специальные символы.

Пожалуйста, обратите внимание, что это несколько сконструированная задача для целей обучения и не оптимально подходит для реального мира.

Спасибо, что помогли мне.

Комментарии:

1. Прочитайте это en.wikipedia.org/wiki/International_email и помните, что arvo@local — это тоже вполне допустимый адрес 🙂

Ответ №1:

Для вашего требования, как вы его описали, вы можете использовать оператор 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]*'
  )
)
 

Смотрите упрощенную демонстрацию.