73 lines
1.6 KiB
PL/PgSQL
73 lines
1.6 KiB
PL/PgSQL
|
|
-- Функция: нет двойных пробелов подряд
|
||
|
|
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;
|
||
|
|
|