-- Функция: нет двойных пробелов подряд CREATE OR REPLACE FUNCTION no_double_space (str text) RETURNS boolean AS $$ BEGIN RETURN str !~ E'\s{2,}'; END; $$ LANGUAGE plpgsql IMMUTABLE; -- Функция: нет пробелов в начале и конце строки CREATE OR REPLACE FUNCTION no_space_start_end (str text) RETURNS boolean AS $$ BEGIN RETURN str !~ E'^\s' AND str !~ E'\s$'; END; $$ LANGUAGE plpgsql IMMUTABLE; -- Функция: нет пробелов вообще CREATE OR REPLACE FUNCTION no_space (str text) RETURNS boolean AS $$ BEGIN RETURN str !~ E'\s'; END; $$ LANGUAGE plpgsql IMMUTABLE; -- Функция: длина строки в заданных границах CREATE OR REPLACE FUNCTION str_length_between (str text, min_len int, max_len int) RETURNS boolean AS $$ BEGIN RETURN LENGTH(str) BETWEEN min_len AND max_len; END; $$ LANGUAGE plpgsql IMMUTABLE; -- Функция: стандартная проверка для слова CREATE OR REPLACE FUNCTION default_word_check (str text) RETURNS boolean AS $$ BEGIN RETURN str IS NULL OR no_space (str) AND str_length_between (str, 1, 64); END; $$ LANGUAGE plpgsql IMMUTABLE; -- Функция: стандартная проверка для строки CREATE OR REPLACE FUNCTION default_str_check (str text) RETURNS boolean AS $$ BEGIN RETURN str IS NULL OR no_double_space (str) AND no_space_start_end (str) AND str_length_between (str, 1, 128); END; $$ LANGUAGE plpgsql IMMUTABLE;