PostgreSQL "недопустимое регулярное выражение: недопустимый escape \ sequence" при использовании ограничения Regex - PullRequest
1 голос
/ 14 апреля 2020

Это мой SQL код:

CREATE TABLE country (
    id      serial          NOT NULL PRIMARY KEY,
    name    varchar(100)    NOT NULL CHECK(name ~ '^[-\p{L} ]{2,100}$'),
    code    varchar(3)      NOT NULL
);

Обратите внимание на ограничение regex в атрибуте name. Приведенный выше код приведет к ERROR: invalid regular expression: invalid escape \ sequence.

. Я попытался использовать escape CHECK(name ~ E'^[-\\p{L} ]{2,100}$'), но снова привел к ERROR: invalid regular expression: invalid escape \ sequence.

. Я также знаю, что если я сделаю CHECK(name ~ '^[-\\p{L} ]{2,100}$'), или CHECK(name ~ E'^[-\p{L} ]{2,100}$'), - SQL получит неправильное регулярное выражение и, следовательно, сгенерирует нарушение ограничения при вставке действительных данных.

Не поддерживает ли ограничение PostgreSQL регулярного выражения шаблоны регулярных выражений (\p) или что-то подобное?


Редактировать # 1

Регулярное выражение ^[-\p{L} ]{2,100}$ в основном допускает использование названия страны в диапазоне от 2 до 100 символов, а разрешенные символы - дефис, пробел и все буквы (включая латинские буквы).

ПРИМЕЧАНИЕ: SQL прекрасно работает при создании таблицы, но выдает ошибку при вставке действительных данных.

Дополнительное примечание: Я использую PostgreSQL 12.1

1 Ответ

2 голосов
/ 14 апреля 2020

Класс * свойства \p{L} Unicode соответствует любой букве, но он не поддерживается в PostgreSQL regex .

Вы можете получить то же поведение, используя [:alpha:] Класс символов POSIX

'^[-[:alpha:] ]{2,100}$'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...