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

ROB*_*ail 0 regex sql string postgresql check-constraints

我的 PostgreSQL 表中有一个列用于类型为 的电话号码VARCHAR。我选择此数据类型是因为在我的国家/地区电话号码以 0 开头。

\n

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

\n

这是我到目前为止所拥有的:

\n
ALTER TABLE contactInfo ADD CONSTRAINT checkPhone\nCHECK(phone NOT SIMILAR TO '%[a-z]%' AND phone SIMILAR TO '%[0-9]%');\n
Run Code Online (Sandbox Code Playgroud)\n

它似乎有效,但恐怕它不会过滤掉特定于不同语言的字符(例如 \xc3\xb9 \xc3\xbb \xc3\xbc \xc3\xa2 \xc3\xa0 等)。

\n

我该怎么做 ?

\n

GMB*_*GMB 5

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

CHECK(phone ~ '^[0-9]*$') 
Run Code Online (Sandbox Code Playgroud)

那就更短了:

CHECK(phone ~ '^\d*$') 
Run Code Online (Sandbox Code Playgroud)

如果您不想允许空字符串,请将量词*(0 或更多)替换为+(至少 1)。


归档时间:

查看次数:

2899 次

最近记录:

6 年 前