PostgreSQL - 正则表达式约束,以便 varchar 仅包含数字

PostgreSQL - regex constraint so that varchar contains only digits

我的 PostgreSQL table 中有一个列用于 phone 个 VARCHAR 类型的数字。我选择了这种数据类型,因为在我的国家 phone 数字以 0 开头。

我需要引入一个约束来检查 phone 号码是否包含 个数字。

这是我目前拥有的:

ALTER TABLE contactInfo ADD CONSTRAINT checkPhone
CHECK(phone NOT SIMILAR TO '%[a-z]%' AND phone SIMILAR TO '%[0-9]%');

它似乎有效,但我担心它不会过滤掉特定于不同语言的字符(如 ù û ü â à 等)。

我该怎么做?

您可以更具体地说您只需要数字:

CHECK(phone ~ '^[0-9]*$') 

更短:

CHECK(phone ~ '^\d*$') 

如果您不想允许空字符串,请将 qantifier *(0 个或多个)替换为 +(至少一个)。