Regex 正则表达式IsOne vs包含
我正在写一个PostGresRegex 正则表达式IsOne vs包含,regex,postgresql,Regex,Postgresql,我正在写一个PostGres检查,以便将文本字段约束为4个不同值之一。我故意避免使用Enum类型,因为已知它会导致问题 我似乎有更多的“包含”,而不是必须是其中之一 ALTER TABLE registrations ADD CONSTRAINT proper_confirmation_status CHECK (confirmation_status:: text ~* '^(Unconfirmed|Confirmed|Rejected|NotApplicable)'::text); 因
检查
,以便将文本字段约束为4个不同值之一。我故意避免使用Enum
类型,因为已知它会导致问题
我似乎有更多的“包含”,而不是必须是其中之一
ALTER TABLE registrations
ADD CONSTRAINT proper_confirmation_status CHECK (confirmation_status::
text ~* '^(Unconfirmed|Confirmed|Rejected|NotApplicable)'::text);
因此:
confirmdddddd
,但confirmdsss
~
(区分大小写)代替~*
(区分大小写)^(..)$
(匹配整个字符串)ALTER TABLE registrations
ADD CONSTRAINT proper_confirmation_status CHECK
(confirmation_status::text ~ '^(Unconfirmed|Confirmed|Rejected|NotApplicable)$');
~
(区分大小写)代替~*
(区分大小写)^(..)$
(匹配整个字符串)ALTER TABLE registrations
ADD CONSTRAINT proper_confirmation_status CHECK
(confirmation_status::text ~ '^(Unconfirmed|Confirmed|Rejected|NotApplicable)$');
我认为你应该在操作符中使用
,而不是正则表达式
ALTER TABLE registrations
ADD CONSTRAINT proper_confirmation_status CHECK (
confirmation_status::text IN ('Unconfirmed', 'Confirmed', 'Rejected', 'NotApplicable'));
我认为你应该在
操作符中使用,而不是正则表达式
ALTER TABLE registrations
ADD CONSTRAINT proper_confirmation_status CHECK (
confirmation_status::text IN ('Unconfirmed', 'Confirmed', 'Rejected', 'NotApplicable'));
如果整个字段应等于您的
-分隔值,请使用^
和$
:“^(未确认|确认|拒绝|不适用)$”
@Wiktor Stribiż我尝试了您的建议,但失败了(见上文第3节)。我刚刚意识到postgres操作符~*
可能是它匹配/包含vs等于的原因。向问题添加postgres标记。$
必须处理第3点OK。如果整个字段应等于您的
分隔值,请使用^
和$
:'^(未确认|确认|拒绝|不适用)$'
@Wiktor Stribiżew我尝试了您的建议,但失败了(见上文第3节)。我刚刚意识到postgres操作符~*
可能是它匹配/包含vs等于的原因。将postgres标记添加到问题中。$
必须已经处理了第3点OK。