#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]*'
)
)
Смотрите упрощенную демонстрацию.